<html> <head> <title>Starter Boolean PolyTree</title> <script src="clipper.js"></script> </head> <body> <div id="svgcontainer"></div> <script> var subj_paths = [[{X:10,Y:10},{X:110,Y:10},{X:110,Y:110},{X:10,Y:110}], [{X:20,Y:20},{X:20,Y:100},{X:100,Y:100},{X:100,Y:20}]]; var clip_paths = [[{X:50,Y:50},{X:150,Y:50},{X:150,Y:150},{X:50,Y:150}], [{X:60,Y:60},{X:60,Y:140},{X:140,Y:140},{X:140,Y:60}]]; var cpr = new ClipperLib.Clipper(); var scale = 100; ClipperLib.JS.ScaleUpPaths(subj_paths, scale); ClipperLib.JS.ScaleUpPaths(clip_paths, scale); cpr.AddPaths(subj_paths, ClipperLib.PolyType.ptSubject, true); // true means closed path cpr.AddPaths(clip_paths, ClipperLib.PolyType.ptClip, true); var solution_polytree = new ClipperLib.PolyTree(); var succeeded = cpr.Execute(ClipperLib.ClipType.ctUnion, solution_polytree, ClipperLib.PolyFillType.pftNonZero, ClipperLib.PolyFillType.pftNonZero); var solution_paths = ClipperLib.Clipper.PolyTreeToPaths(solution_polytree); // To exPolygons, when use_deprecate = true //var solution_expolygons = new ClipperLib.ExPolygons(); //ClipperLib.Clipper.PolyTreeToExPolygons(solution_polytree, solution_expolygons); // Extract closed paths from PolyTree //var solution_closed_paths = ClipperLib.Clipper.ClosedPathsFromPolyTree(solution_polytree); // Extract open paths from PolyTree //var solution_open_paths = ClipperLib.Clipper.OpenPathsFromPolyTree(solution_polytree); // console.log(JSON.stringify(solution_paths)); // Scale down coordinates and draw ... var svg = '<svg style="background-color:#dddddd" width="160" height="160">'; svg += '<path stroke="black" fill="yellow" stroke-width="2" d="' + paths2string(solution_paths, scale) + '"/>'; svg += '</svg>'; document.getElementById("svgcontainer").innerHTML = svg; // Converts Paths to SVG path string // and scales down the coordinates function paths2string (paths, scale) { var svgpath = "", i, j; if (!scale) scale = 1; for(i = 0; i < paths.length; i++) { for(j = 0; j < paths[i].length; j++){ if (!j) svgpath += "M"; else svgpath += "L"; svgpath += (paths[i][j].X / scale) + ", " + (paths[i][j].Y / scale); } svgpath += "Z"; } if (svgpath=="") svgpath = "M0,0"; return svgpath; } </script> </body> </html>