Example #1
0
    modify(clip, type) {
        var [clipPositionX, clipPositionY] = [clip.positionX - clip.positionX % 25, clip.positionY - clip.positionY % 25];
        var absoluteClipPoints = clip.points.map(([x, y]) => {
            return {X: x + clipPositionX - clip.options.center[0], Y: y + clipPositionY - clip.options.center[1]};

        });
        var absolutePoints = this.points.map(([x, y]) => {
            return {X: x + this.positionX, Y: y + this.positionY};
        });
        var clipper = new ClipperLib.Clipper();

        clipper.AddPaths([absolutePoints], ClipperLib.PolyType.ptSubject, true);
        clipper.AddPaths([absoluteClipPoints], ClipperLib.PolyType.ptClip, true);
        var cliptype;
        switch (type) {
            case 'subtract':
                cliptype = ClipperLib.ClipType.ctDifference;
                break;
            case 'add':
                cliptype = ClipperLib.ClipType.ctUnion;
                break;
        }
        var polyfilltype = ClipperLib.PolyFillType.pftPositive;
        var result = new ClipperLib.Paths();
        clipper.Execute(cliptype, result);

        var processedResult = result[0].map((point) => {
            return [point.X - this.positionX, point.Y - this.positionY];
        });
        this.points = processedResult;
        this.render();
    }
Example #2
0
function computeWalkableArea(object) {
	var cpr = new ClipperLib.Clipper();
	var coords = object.geometry.coordinates;
	var perimeter = coords[0];
	
	var subj_paths = [fromJsonToClipper(perimeter)];
	var clip_paths = [];

	for (var i = 1; i < coords.length; i++) {
	    var internal_hole = coords[i];
	 	clip_paths.push(fromJsonToClipper(internal_hole));
    }
	
	for (k in object.children) {
		var child = object.children[k];
		if (child.geometry.type === 'Polygon') {
			clip_paths.push(fromJsonToClipper(child.getLocalCoordinates()));
		}
	}
	// console.log(subj_paths);
	//console.log(clip_paths);
	cpr.AddPaths(subj_paths, ClipperLib.PolyType.ptSubject, true);  // true means closed path
	cpr.AddPaths(clip_paths, ClipperLib.PolyType.ptClip, true);

	var walkableArea = new ClipperLib.Paths();
	var succeeded = cpr.Execute(ClipperLib.ClipType.ctDifference, walkableArea, 
		ClipperLib.PolyFillType.pftNonZero, ClipperLib.PolyFillType.pftNonZero);
	walkableArea = walkableArea.map(fromClipperToJson);
	return walkableArea;
}