pathItem group interesections

multi path intersections

by Nick Hulea

HTML

<script src="http://cdn.eyahuska.com/paper.js"></script>
<canvas resize="true" id="canvas-1"></canvas>
<script type="text/paperscript" canvas="canvas-1">
var iArray = [];
var n;
var path = new Path.Rectangle(new Point(30, 25), new Size(200, 200));
path.strokeColor = 'black';

var secondPath = path.clone();
var intersectionGroup = new Group();

var marker = new Path.Circle({
    center: view.center,
    radius: 10,
    fillColor: 'green'
});

function onFrame(event) {
    secondPath.rotate(1);
    marker.position = secondPath.firstSegment.point;
    var intersections = secondPath.getIntersections(path);
	intersections.sort(function(loc1, loc2) {
		var path1 = loc1.getPath(),
			path2 = loc2.getPath();
		return path1 === path2
				// We can add parameter (0 <= t <= 1) to index (a integer)
				// to compare both at the same time
				? (loc1.getIndex() + loc1.getParameter())
					- (loc2.getIndex() + loc2.getParameter())
				// Sort by path id to group all locations on the same path.
				: path1._id - path2._id;
	});
    intersectionGroup.removeChildren();

    for (var i = 0; i < intersections.length; i++) {
        var intersectionPath = new Path.Circle({
            center: intersections[i].point,
            radius: 10,
            fillColor: 'red'
        });
        iArray.push(intersections[i].point);
        intersectionGroup.addChild(intersectionPath);
    }
    var n = new Path(iArray);
    n.fillColor = 'black';
    n.closed = true;
    n.selected = true;
    intersectionGroup.addChild(n);
    iArray = [];
}

</script>