From 7f8237adc89adfd8496cac7de75922d35c59d008 Mon Sep 17 00:00:00 2001 From: hkrish Date: Mon, 18 Mar 2013 17:04:46 +0100 Subject: [PATCH 01/48] Rudimentary Boolean (Union) code working. Only Polygons for now. Need to add handles appropriately --- boolean1.js | 89 ++++++++++++++++++++++ boolean2.js | 186 ++++++++++++++++++++++++++++++++++++++++++++++ booleanStudy.html | 13 ++++ 3 files changed, 288 insertions(+) create mode 100644 boolean1.js create mode 100644 boolean2.js create mode 100644 booleanStudy.html diff --git a/boolean1.js b/boolean1.js new file mode 100644 index 00000000..a6e99ddd --- /dev/null +++ b/boolean1.js @@ -0,0 +1,89 @@ + +project.currentStyle.fillColor = 'black'; + +var path11 = new Path.Rectangle([100, 100], [100, 100]); +var path21 = new Path.Rectangle([50, 30], [100, 100]); +var newPath = new Path(); +path11.style.fillColor = 'rgb( 71, 91, 98 )' +path21.style.fillColor = 'rgb( 129, 144, 144 )' + + +// onFrame = function( event ) { + path21.rotate( 148 ); + + var path1 = path11.clone(); + var path2 = path21.clone(); + + newPath.removeSegments(); + +// Intersections of path1 with path2 +var ixs = path1.getIntersections( path2 ); + +// TODO for both paths, first sort ixs according to curveOffset, +// so that, insert order is correct + +ixs.forEach( function( item, index ){ + // T + console.log( item.curveOffset ) + var newSeg1 = new Segment( item.point ); + var newSeg2 = new Segment( item.point ); + newSeg1._ixOtherSeg = newSeg2; + newSeg2._ixOtherSeg = newSeg1; + path1.insertSegment( item.curve.segment1.index + 1, newSeg1 ); + path2.insertSegment( item._ixCurve.segment1.index + 1, newSeg2 ); +}); + +// console.log( path2.segments ) + +var startSeg = path1.firstSegment; +// TODO Make sure, if path1 is not completely inside path2 +while( path2.contains( startSeg.point ) ) { + startSeg = startSeg.next; +} + +// path2.firstSegment.selected = path2.firstSegment.next.selected = true; +// path1.firstSegment.selected = path1.firstSegment.next.selected = true; + +console.log( path1.isClockwise() ) +console.log( path2.isClockwise() ) + +// path2.reverse() +// startSeg.selected = true; + +var curSeg; +var count = 1; +var ixswitch = true; +while( curSeg !== startSeg ) { + if( !curSeg ) { + curSeg = startSeg; + } + if( curSeg._ixOtherSeg ){ + curSeg = curSeg._ixOtherSeg; + ixswitch = !ixswitch + } + newPath.addSegment( new Segment( curSeg ) ); + + var text = new PointText( curSeg.point - [ 5, 5 ] ); + text.justification = 'center'; + if( ixswitch ) { + text.fillColor = 'black'; + }else{ + text.fillColor = 'blue'; + } + text.content = count.toString(); + count++; + + curSeg = curSeg.next; +} + +newPath.translate( [200, 0] ); +newPath.style.fillColor = 'rgb( 209, 28, 36 )'; +newPath.selected = true; + +// path1.remove(); +// path2.remove(); +// } + +// path1.selected = true; +// path1.selected = true; + diff --git a/boolean2.js b/boolean2.js new file mode 100644 index 00000000..15947f9f --- /dev/null +++ b/boolean2.js @@ -0,0 +1,186 @@ + +project.currentStyle.fillColor = 'black'; + +var path11 = new Path.Circle([100, 100], 50); +// var path11 = new Path.Rectangle([100, 100], [100, 100]); +var path21 = new Path.Rectangle([100, 100], [100, 100]); +// var path21 = new Path.Polygon +var newPath = new Path(); +path11.style.fillColor = 'rgb( 71, 91, 98 )' +path21.style.fillColor = 'rgb( 129, 144, 144 )' + + +// onFrame = function( event ) { + path21.rotate( 1 ); + + newPath.removeSegments(); + + var path1 = path11.clone(); + var path2 = path21.clone(); + +// console.log(path1.isClockwise()) +// console.log(path2.isClockwise()) + + // Intersections of path1 with path2 + var ixs = path1.getIntersections( path2 ); + + // TODO for both paths, first sort ixs according to curveOffset, + // so that, insert order is correct + + if( ixs.length > 0 ) { + ixs.forEach( function( item, index ){ + + var newSeg1 = new Segment( item.point ); + var newSeg2 = new Segment( item.point ); + newSeg1._ixCurveOffset = item.curveOffset; + newSeg2._ixCurveOffset = item._ixLocation.curveOffset; + newSeg1._ixOtherSeg = newSeg2; + newSeg2._ixOtherSeg = newSeg1; + + if( item.curve.segment1._ixPoints === undefined ){ + item.curve.segment1._ixPoints = [ newSeg1 ]; + } else { + item.curve.segment1._ixPoints.push( newSeg1 ); + } + if( item._ixLocation.curve.segment1._ixPoints === undefined ){ + item._ixLocation.curve.segment1._ixPoints = [ newSeg2 ]; + } else { + item._ixLocation.curve.segment1._ixPoints.push( newSeg2 ); + } + }); + + + // path1.segments.forEach( function( item, index ){ + // if( item._ixPoints ) { + // if( item._ixPoints.length > 1 ) { + // item._ixPoints.sort( compare_ixPoints ); + // } + // path1.insertSegments( item.index + 1, item._ixPoints ); + // item._ixPoints = undefined; + // } + // }); + // path2.segments.forEach( function( item, index ){ + // console.log(item._ixPoints) + // if( item._ixPoints ) { + // if( item._ixPoints.length > 1 ) { + // item._ixPoints.sort( compare_ixPoints ); + // } + // path2.insertSegments( item.index + 1, item._ixPoints ); + // item._ixPoints = undefined; + // } + // }); + + // TODO make sure path is closed + + // Walk the segments in path1, backwards (counter-clockwise) + var pathSeg = path1.lastSegment; + do{ + if( pathSeg._ixPoints ) { + if( pathSeg._ixPoints.length > 1 ) { + pathSeg._ixPoints.sort( compare_ixPoints ); + } + path1.insertSegments( pathSeg.index + 1, pathSeg._ixPoints ); + pathSeg._ixPoints = undefined; + } + pathSeg = pathSeg.previous; + } while ( pathSeg !== path1.lastSegment ); + + // Walk the segments in path2, backwards (counter-clockwise) + var pathSeg = path2.lastSegment; + do { + if( pathSeg._ixPoints ) { + if( pathSeg._ixPoints.length > 1 ) { + pathSeg._ixPoints.sort( compare_ixPoints ); + } + path2.insertSegments( pathSeg.index + 1, pathSeg._ixPoints ); + pathSeg._ixPoints = undefined; + } + pathSeg = pathSeg.previous; + } while ( pathSeg !== path2.lastSegment ); + + + // TODO Make sure, if path1 is not completely inside path2. + // TODO. This part will differ for different boolean ops. + // For Union + var startSeg = path1.firstSegment; + while( path2.contains( startSeg.point ) || startSeg._ixOtherSeg ) { + startSeg = startSeg.next; + } + + // path11.segments[startSeg.index].selected = true; + + // startSeg.selected = true; + + var curSeg; + var count = 1; + var ixswitch = true; + do { + if( !curSeg ) { + curSeg = startSeg; + } + if( curSeg._ixOtherSeg ){ + curSeg = curSeg._ixOtherSeg; + ixswitch = !ixswitch + } + newPath.addSegment( new Segment( curSeg ) ); + + // var text = new PointText( curSeg.point - [ 5, 5 ] ); + // text.justification = 'center'; + // if( ixswitch ) { + // text.fillColor = 'black'; + // }else{ + // text.fillColor = 'blue'; + // } + // text.content = count.toString(); + + count++; + + curSeg = curSeg.next; + } while( curSeg !== startSeg && count < 50); + + // console.log(count); + + + // annotateSegments( path1, 5, '#f00' ) + // annotateSegments( path2, -5, '#000' ) + + newPath.closePath() + newPath.translate( [200, 0] ); + newPath.style.fillColor = 'rgb( 209, 28, 36 )'; + newPath.fullySelected = true; + } + +// path1.remove(); +// path2.remove(); +// } + +// path1.selected = true; +// path2.selected = true; + + +// Sort new intersection points according to their +// distance along the curve, so that when we +// insert them in to the respective paths, the orientation +// of the path is maintained ( in out case clockwise ) +function compare_ixPoints( a, b ) { + if( a._ixCurveOffset < b._ixCurveOffset ) { + return -1 + } else if( a._ixCurveOffset > b._ixCurveOffset ){ + return 1; + } else { + // This shouldn't happen?! + return 0; + } +} + +// For debugging: Show a number next to each segment ina path +function annotateSegments( p, d, c ) { + var count = 0; + p.segments.forEach( function( item, index ){ + var text = new PointText( item.point - [ d, d ] ); + text.style.fillColor = c; + text.justification = 'center'; + text.content = count.toString(); + count++; + }); +} diff --git a/booleanStudy.html b/booleanStudy.html new file mode 100644 index 00000000..a15fa84a --- /dev/null +++ b/booleanStudy.html @@ -0,0 +1,13 @@ + + + + + Boolean Study + + + + + + + + From b96136fc3effef597537d58ee42fac087c1a2b92 Mon Sep 17 00:00:00 2001 From: hkrish Date: Mon, 18 Mar 2013 22:54:10 +0100 Subject: [PATCH 02/48] Boolean re write using curve.split. Not working! :( --- boolean2.js | 2 +- boolean3.js | 166 ++++++++++++++++++++++++++++++++++++++++++++++ booleanStudy.html | 2 +- 3 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 boolean3.js diff --git a/boolean2.js b/boolean2.js index 15947f9f..4d955915 100644 --- a/boolean2.js +++ b/boolean2.js @@ -1,7 +1,7 @@ project.currentStyle.fillColor = 'black'; -var path11 = new Path.Circle([100, 100], 50); +var path11 = new Path.Circle([80, 80], 50); // var path11 = new Path.Rectangle([100, 100], [100, 100]); var path21 = new Path.Rectangle([100, 100], [100, 100]); // var path21 = new Path.Polygon diff --git a/boolean3.js b/boolean3.js new file mode 100644 index 00000000..250fa484 --- /dev/null +++ b/boolean3.js @@ -0,0 +1,166 @@ +project.currentStyle.fillColor = 'black'; + +// var path11 = new Path.Circle([95, 95], 50); +// var path21 = new Path.Rectangle([100, 100], [100, 100]); + +// var path11 = new Path.Rectangle([100, 100], [100, 100]); +// var path21 = new Path.Polygon + +var path11 = new Path.Star(new Point(260, 250), 10, 50, 150); +var path21 = new Path.Star(new Point(350, 250), 10, 70, 250); +// path11.smooth(); +// path21.smooth(); + +path11.style.fillColor = 'rgb( 71, 91, 98 )' +path21.style.fillColor = 'rgb( 129, 144, 144 )' + + +function compare_ixPoints( a, b ) { + if( a.curveOffset < b.curveOffset ) { + return -1 + } else if( a.curveOffset > b.curveOffset ){ + return 1; + } else { + // This shouldn't happen?! + return 0; + } +} + +Path.prototype.getUnion = function( other ) { + var path1 = this.clone(); + var path2 = other.clone(); + // TODO do the necessary checks here. + if( !path1.isClockwise() ) path1.reverse(); + if( !path2.isClockwise() ) path2.reverse(); + + console.time("Lines"); + var ixs = path1.getIntersections( path2 ); + console.timeEnd("Lines"); + + console.time("sort"); + ixs.sort( compare_ixPoints ); + console.timeEnd("sort"); + + // console.log( ixs.length ) + + for (var i = 0, l = ixs.length; i < l; i++) { + for (var j = i + 1, l = ixs.length; j < l; j++) { + if(ixs[i].point == ixs[j].point && + ixs[i].curve.index === ixs[j].curve.index && + ixs[i]._ixLocation.curve.index === ixs[j]._ixLocation.curve.index ){ + ixs[i]._ixdup = true; + } + } + } + + var counter = 0; + + if( ixs.length > 1 ){ + ixs.forEach( function( item, index ){ + if(item._ixdup) return; + var crv1 = item.divide(); + var crv2 = item._ixLocation.divide(); + + if( !crv1 ) { + if( item.parameter === 1 ){ + crv1 = item.curve.next; + } else { + crv1 = item.curve; + } + } + if( !crv2 ) { + console.log( item._ixLocation ) + + // TODO if _ixLocation.parameter is null + // patch the _addIntersections method, + // to intersect the curve back again at that point + + if( item._ixLocation.parameter === 1 ){ + crv2 = item._ixLocation.curve.next; + } else { + crv2 = item._ixLocation.curve; + } + } + + annotateSegment(crv2.segment1, -10, "#000", false, counter++) + crv1.segment1._ixLink = crv2.segment1; + crv2.segment1._ixLink = crv1.segment1; + }); + + // annotateSegments( path1, 5, '#000', true ) + // annotateSegments( path2, -5, '#00f' ) + // path1.fullySelected = true; + // path2.fullySelected = true; + + var newPath = new Path(), + startSeg = path1.firstSegment, + curSeg, loopCut = 0; + + while( path2.contains( startSeg.point ) || startSeg._ixLink ) { + startSeg = startSeg.next; + } + + annotateSegment( startSeg, -5, "#0ff" ) + + do { + if( !curSeg ) { + curSeg = startSeg; + } + if( curSeg._ixLink ){ + newPath.addSegment( new Segment( curSeg.point, curSeg.handleIn, curSeg._ixLink.handleOut) ); + console.log( "S - " + curSeg.index + " -> " + curSeg._ixLink.index ) + curSeg = curSeg._ixLink; + } else { + newPath.addSegment( new Segment( curSeg ) ); + } + loopCut++; + curSeg = curSeg.next; + } while( curSeg !== startSeg && loopCut < 50); + + newPath.closePath(); + // newPath.style.fillColor = null + newPath.translate( [500, 0] ) + annotateSegments( newPath , -5, '#0f0' ); + + } else { + // TODO one path is either completely inside + // or outside the other one. + } + + // Debug code + // console.log( newPath.segments.length ); + // annotateSegments( path1, 5, '#000', true ) + // path1.fullySelected = true; + // annotateSegments( path2, -5, '#00f' ) + // path2.fullySelected = true; + // path1.selected = true; + path2.selected = true; +} + +path11.getUnion( path21 ) + +// For debugging: Show a number next to each segment ina path +function annotateSegments( p, d, c, hiLink ) { + hiLink = hiLink || false; + p.segments.forEach( function( item, index ){ + annotateSegment( item, d, c, hiLink ) + }); +} +function annotateSegment( s, d, c, hiLink , txt) { + hiLink = hiLink || false; + var text = new PointText( s.point - [ d, d ] ); + text.style.fillColor = c; + text.justification = 'center'; + if( txt === undefined ) + text.content = s.index.toString(); + else + text.content = txt; + if( hiLink && s._ixLink) { + annotateSegment( s._ixLink, d - 5, '#f00', false ) + } +} +function markpoint( p ) { + new Path.Circle(p, 2).style = { strokeColor: '#f0f', fillColor: '#000'} +} + +// markpoint( [236.34995495235776, 152.72369685178597 ]) diff --git a/booleanStudy.html b/booleanStudy.html index a15fa84a..f1009cc0 100644 --- a/booleanStudy.html +++ b/booleanStudy.html @@ -5,7 +5,7 @@ Boolean Study - + From 7b6b94fc21b3b4725ae28c67c9a21277767cecc3 Mon Sep 17 00:00:00 2001 From: hkrish Date: Thu, 18 Apr 2013 20:27:19 +0200 Subject: [PATCH 03/48] Boolean Union and Intersection working --- .exrc | 3 + Boolean.js | 488 ++++++++++++++++++++ boolean1.js | 89 ---- boolean2.js | 186 -------- boolean3.js | 166 ------- booleanStudy.html | 39 +- booleanTests.js | 225 +++++++++ tags | 1108 +++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 1859 insertions(+), 445 deletions(-) create mode 100644 .exrc create mode 100644 Boolean.js delete mode 100644 boolean1.js delete mode 100644 boolean2.js delete mode 100644 boolean3.js create mode 100644 booleanTests.js create mode 100644 tags diff --git a/.exrc b/.exrc new file mode 100644 index 00000000..59c101b9 --- /dev/null +++ b/.exrc @@ -0,0 +1,3 @@ + +set tags+=./tags + diff --git a/Boolean.js b/Boolean.js new file mode 100644 index 00000000..84615ade --- /dev/null +++ b/Boolean.js @@ -0,0 +1,488 @@ + + +/*! + * + * Vector boolean operations on paperjs objects + * This is mostly written for clarity (I hope it is clear) and compatibility, + * not optimised for performance, and has to be tested heavily for stability. + * (Looking up to Java's Area path boolean algorithms for stability, + * but the code is too complex —mainly because the operations are stored and + * enumerable, such as quadraticCurveTo, cubicCurveTo etc.; and is largely + * undocumented to directly adapt from) + * + * Supported + * - paperjs Path objects + * - Boolean Union operations + * - Boolean Intersection operations + * - handles path complexity quite nicely + * + * Not supported yet ( which I would like to see supported ) + * - Compound Paths as input ( however compound paths are correctly handled in the output ) + * - Self-intersecting Paths + * - Boolean Subtraction operation ( depends on compound paths as input ) + * - Paths are clones of each other that ovelap exactly on top of each other! + * + * In the Not-supported-yet list, the first three can be easily implemented, + * as for the last point, I need help! Thanks! :) + * + * ------ + * Harikrishnan Gopalakrishnan + * http://hkrish.com/playground/paperbool.html + * + * ------ + * Paperjs + * Copyright (c) 2011, Juerg Lehni & Jonathan Puckey + * http://paperjs.org/license/ + * + */ + + +/** + * BooleanOps defines the boolean operator functions to use. + * A boolean operator is a function f( link:Link, isInsidePath1:Boolean, isInsidePath2:Boolean ) : + * should return a Boolean value indicating whether to keep the link or not. + * return true - keep the path + * return false - discard the path + */ + var BooleanOps = { + Union: function( lnk, isInsidePath1, isInsidePath2 ){ + if( isInsidePath1 || isInsidePath2 ){ + return false; + } + return true; + }, + + Intersection: function( lnk, isInsidePath1, isInsidePath2 ){ + if( !isInsidePath1 && !isInsidePath2 ){ + return false; + } + return true; + } +}; + +/** + * The datastructure for boolean computation: + * Graph - List of Links + * Link - Connects 2 Nodes, represents a Curve + * Node - Connects 2 Links, represents a Segment + */ + + var NORMAL_NODE = 1; + var INTERSECTION_NODE = 2; + var IntersectionID = 1; + var UNIQUE_ID = 1; + +/** + * Nodes in the graph are analogous to Segment objects + * with additional linkage information to track intersections etc. + * (enough to do a complete graph traversal) + * @param {Point} _point + * @param {Point} _handleIn + * @param {Point} _handleOut + * @param {Any} _id + */ + function Node( _point, _handleIn, _handleOut, _id ){ + this.id = _id; + this.type = NORMAL_NODE; + this.point = _point; + this.handleIn = _handleIn; // handleIn + this.handleOut = _handleOut; // handleOut + this.linkIn = null; // aka linkIn + this.linkOut = null; // linkOut + this.uniqueID = ++UNIQUE_ID; + + // In case of an intersection this will be a merged node. + // And we need space to save the "other Node's" parameters before merging. + this.idB = null; + // this.pointB = this.point; // point should be the same + this.handleBIn = null; + this.handleBOut = null; + this.linkBIn = null; + this.linkBOut = null; + + this._segment = null; + + this.getSegment = function( recalculate ){ + if( this.type === INTERSECTION_NODE && recalculate ){ + // point this.linkIn and this.linkOut to those active ones + // also point this.handleIn and this.handleOut to correct in and out handles + // If a link is null, make sure the corresponding handle is also null + this.handleIn = (this.linkIn)? this.handleIn : null; + this.handleOut = (this.linkOut)? this.handleOut : null; + this.handleBIn = (this.linkBIn)? this.handleBIn : null; + this.handleBOut = (this.linkBOut)? this.handleBOut : null; + // Select the valid links + this.linkIn = this.linkIn || this.linkBIn; // linkIn + this.linkOut = this.linkOut || this.linkBOut; // linkOut + // Also update the references in links to point to "this" Node + this.linkIn.nodeOut = this; // linkIn.nodeEnd + this.linkOut.nodeIn = this; // linkOut.nodeStart + this.handleIn = this.handleIn || this.handleBIn; + this.handleOut = this.handleOut || this.handleBOut; + } + this._segment = this._segment || new Segment( this.point, this.handleIn, this.handleOut ); + return this._segment; + }; +} + +/** + * Links in the graph are analogous to CUrve objects + * @param {Node} _nodeIn + * @param {Node} _nodeOut + * @param {Any} _id + */ + function Link( _nodeIn, _nodeOut, _id ) { + this.id = _id; + this.nodeIn = _nodeIn; // nodeStart + this.nodeOut = _nodeOut; // nodeEnd + this.nodeIn.linkOut = this; // nodeStart.linkOut + this.nodeOut.linkIn = this; // nodeEnd.linkIn + this._curve = null; + this.intersections = []; + + // for reusing the paperjs function we need to (temperorily) build a Curve object from this Link + // for performance reasons we cache it. + this.getCurve = function() { + this._curve = this._curve || new Curve( this.nodeIn.getSegment(), this.nodeOut.getSegment() ); + return this._curve; + }; +} + +/** + * makes a graph. Only works on paths, for compound paths we need to + * make graphs for each of the child paths and merge them. + * @param {Path} path + * @param {Integer} id + * @return {Array} Links + */ + function makeGraph( path, id ){ + var graph = []; + var segs = path.segments, prevNode = null, firstNode = null, nuLink, nuNode; + for( i = 0, l = segs.length; i < l; i++ ){ + var nuSeg = segs[i].clone(); + nuNode = new Node( nuSeg.point, nuSeg.handleIn, nuSeg.handleOut, id ); + if( prevNode ) { + nuLink = new Link( prevNode, nuNode, id ); + graph.push( nuLink ); + } + prevNode = nuNode; + if( !firstNode ){ + firstNode = nuNode; + } + } + // the path is closed + nuLink = new Link( prevNode, firstNode, id ); + graph.push( nuLink ); + return graph; +} + + +/** + * Calculates the Union of two paths + * Boolean API. + * @param {Path} path1 + * @param {Path} path2 + * @return {CompoundPath} union of path1 & path2 + */ + function boolUnion( path1, path2 ){ + return computeBoolean( path1, path2, BooleanOps.Union ); +} + + +/** + * Calculates the Intersection between two paths + * Boolean API. + * @param {Path} path1 + * @param {Path} path2 + * @return {CompoundPath} Intersection of path1 & path2 + */ + function boolIntersection( path1, path2 ){ + return computeBoolean( path1, path2, BooleanOps.Intersection ); +} + + +/** + * Actual function that computes the boolean + * @param {Path} _path1 (cannot be self-intersecting at the moment) + * @param {Path} _path2 (cannot be self-intersecting at the moment) + * @param {BooleanOps type} operator + * @return {CompoundPath} boolean result + */ + function computeBoolean( _path1, _path2, operator ){ + IntersectionID = 1; + UNIQUE_ID = 1; + + // The boolean operation may modify the original paths + var path1 = _path1.clone(); + var path2 = _path2.clone(); + if( !path1.clockwise ){ path1.reverse(); } + if( !path2.clockwise ){ path2.reverse(); } + + // Prepare the graphs. Graphs are list of Links that retains + // full connectivity information. The order of links in a graph is not important + // That allows us to sort and merge graphs and 'splice' links with their splits easily. + // Also, this is the place to resolve self-intersecting paths + var graph = makeGraph( path1, 1 ); + var graph2 = makeGraph( path2, 2 ); + // Merge the two graphs. Since we have unique id's for each Link and Node, + // retrieveing the original graphs is rather simple. + graph = graph.concat( graph2 ); + + // Sort function to sort intersections according to the 'parameter'(t) in a link (curve) + function ixSort( a, b ){ return a._parameter - b._parameter; } + + var i, j, k, l, lnk, crv, node, nuNode, leftLink, rightLink; + /* + * Pass 1: + * Calculate the intersections for all graphs + * TODO: test if this takes are of self intersecting paths - NO + * And since it doesn't take self-intersecting curves, we need to only calculate + * intersections if the "id" of the links differ. + * The rest of the algorithm can easily be modified to resolve self-intersections + */ + for ( i = graph.length - 1; i >= 0; i--) { + var c1 = graph[i].getCurve(); + var v1 = c1.getValues(); + for ( j = i -1; j >= 0; j-- ) { + if( graph[j].id === graph[i].id ){ continue; } + var c2 = graph[j].getCurve(); + var v2 = c2.getValues(); + var loc = []; + Curve._addIntersections( v1, v2, loc ); + if( loc.length ){ + for (k = 0, l=loc.length; k= 0; i--) { + if( graph[i].intersections.length ){ + var ix = graph[i].intersections; + ix.sort( ixSort ); + // Remove the graph link, this link has to be split and replaced with the splits + lnk = graph.splice( i, 1 )[0]; + for (j =0, l=ix.length; j discard cases 1, 2 and 3 + * * Intersection -> discard case 4 + * * Path1-Path2 -> discard cases 2, 3[Path1] and 4[Path2]‡ + * * Path2-Path1 -> discard cases 1, 3[Path2] and 4[Path1] + * ‡ - 4[Path2] means curves of case 4 that belongs to Path2 + */ + + // step 1: discard invalid links according to the boolean operator + for ( i = graph.length - 1; i >= 0; i--) { + lnk = graph[i]; + crv = lnk.getCurve(); + // var midPoint = new Point(lnk.nodeIn.point); + var midPoint = crv.getPoint( 0.5 ); + var insidePath1 = (lnk.id === 1 )? false : path1.contains( midPoint ); + var insidePath2 = (lnk.id === 2 )? false : path2.contains( midPoint ); + if( !operator( lnk, insidePath1, insidePath2 ) ){ + // lnk = graph.splice( i, 1 )[0]; + lnk.INVALID = true; + lnk.nodeIn.linkOut = null; + lnk.nodeOut.linkIn = null; + } + } + + // step 2: Match nodes according to their _intersectionID and merge them together + var len = graph.length; + while( len-- ){ + node = graph[len].nodeIn; + if( node.type === INTERSECTION_NODE ){ + var otherNode = null; + for (i = len - 1; i >= 0; i--) { + var tmpnode = graph[i].nodeIn; + if( tmpnode._intersectionID === node._intersectionID && + tmpnode.uniqueID !== node.uniqueID ) { + otherNode = tmpnode; + break; + } + } + if( otherNode ) { + //Check if it is a self-intersecting Node + if( node.id === otherNode.id ){ + // Swap the outgoing links, this will resolve a knot and create two paths, + // the portion of the original path on one side of a self crossing is counter-clockwise, + // so one of the resulting paths will also be counter-clockwise + var tmp = otherNode.linkOut; + otherNode.linkOut = node.linkOut; + node.linkOut = tmp; + tmp = otherNode.handleOut; + otherNode.handleOut = node.handleOut; + node.handleOut = tmp; + node.type = otherNode.type = NORMAL_NODE; + node._intersectionID = null; + node._segment = otherNode._segment = null; + } else { + // Merge the nodes together, by adding this node's information to the other node + otherNode.idB = node.id; + otherNode.handleBIn = node.handleIn; + otherNode.handleBOut = node.handleOut; + otherNode.linkBIn = node.linkIn; + otherNode.linkBOut = node.linkOut; + otherNode._segment = null; + if( node.linkIn ){ node.linkIn.nodeOut = otherNode; } + if( node.linkOut ){ node.linkOut.nodeIn = otherNode; } + // Clear this node's intersectionID, so that we won't iterate over it again + node._intersectionID = null; + } + } + } + } + + // Final step: Retrieve the resulting paths from the graph + var boolResult = new CompoundPath(); + var firstNode = true, nextNode; + while( firstNode ){ + firstNode = nextNode = null; + len = graph.length; + while( len-- ){ + if( !graph[len].INVALID && !graph[len].nodeIn.visited && !firstNode ){ + firstNode = graph[len].nodeIn; + break; + } + } + if( firstNode ){ + var path = new Path(); + path.add( firstNode.getSegment( true ) ); + firstNode.visited = true; + nextNode = firstNode.linkOut.nodeOut; + while( firstNode.uniqueID !== nextNode.uniqueID ){ + path.add( nextNode.getSegment( true ) ); + nextNode.visited = true; + nextNode = nextNode.linkOut.nodeOut; + } + path.closed = true; + // path.clockwise = true; + boolResult.addChild( path ); + } + } + boolResult = boolResult.reduce(); + + return boolResult; +} + + +// Same as the paperjs' Numerical class, +// added here because I can't access the original from this scope +var Numerical = { + TOLERANCE : 10e-6 +}; + +// paperjs' Curve._addIntersections modified to return just intersection Point with a +// unique id. +paper.Curve._addIntersections = function(v1, v2, locations) { + var bounds1 = Curve.getBounds(v1), + bounds2 = Curve.getBounds(v2); + if (bounds1.touches(bounds2)) { + // See if both curves are flat enough to be treated as lines. + if (Curve.isFlatEnough(v1, /*#=*/ Numerical.TOLERANCE) && + Curve.isFlatEnough(v2, /*#=*/ Numerical.TOLERANCE)) { + // See if the parametric equations of the lines interesct. + var point = new Line(v1[0], v1[1], v1[6], v1[7], false) + .intersect(new Line(v2[0], v2[1], v2[6], v2[7], false), + // Filter out beginnings of the curves, to avoid + // duplicate solutions where curves join. + true, false); + if (point){ + point._intersectionID = IntersectionID++; + locations.push( point ); + } + } else { + // Subdivide both curves, and see if they intersect. + var v1s = Curve.subdivide(v1), + v2s = Curve.subdivide(v2); + for (var i = 0; i < 2; i++) + for (var j = 0; j < 2; j++) + this._addIntersections(v1s[i], v2s[j], locations); + } + } + return locations; +}; diff --git a/boolean1.js b/boolean1.js deleted file mode 100644 index a6e99ddd..00000000 --- a/boolean1.js +++ /dev/null @@ -1,89 +0,0 @@ - -project.currentStyle.fillColor = 'black'; - -var path11 = new Path.Rectangle([100, 100], [100, 100]); -var path21 = new Path.Rectangle([50, 30], [100, 100]); -var newPath = new Path(); -path11.style.fillColor = 'rgb( 71, 91, 98 )' -path21.style.fillColor = 'rgb( 129, 144, 144 )' - - -// onFrame = function( event ) { - path21.rotate( 148 ); - - var path1 = path11.clone(); - var path2 = path21.clone(); - - newPath.removeSegments(); - -// Intersections of path1 with path2 -var ixs = path1.getIntersections( path2 ); - -// TODO for both paths, first sort ixs according to curveOffset, -// so that, insert order is correct - -ixs.forEach( function( item, index ){ - // T - console.log( item.curveOffset ) - var newSeg1 = new Segment( item.point ); - var newSeg2 = new Segment( item.point ); - newSeg1._ixOtherSeg = newSeg2; - newSeg2._ixOtherSeg = newSeg1; - path1.insertSegment( item.curve.segment1.index + 1, newSeg1 ); - path2.insertSegment( item._ixCurve.segment1.index + 1, newSeg2 ); -}); - -// console.log( path2.segments ) - -var startSeg = path1.firstSegment; -// TODO Make sure, if path1 is not completely inside path2 -while( path2.contains( startSeg.point ) ) { - startSeg = startSeg.next; -} - -// path2.firstSegment.selected = path2.firstSegment.next.selected = true; -// path1.firstSegment.selected = path1.firstSegment.next.selected = true; - -console.log( path1.isClockwise() ) -console.log( path2.isClockwise() ) - -// path2.reverse() -// startSeg.selected = true; - -var curSeg; -var count = 1; -var ixswitch = true; -while( curSeg !== startSeg ) { - if( !curSeg ) { - curSeg = startSeg; - } - if( curSeg._ixOtherSeg ){ - curSeg = curSeg._ixOtherSeg; - ixswitch = !ixswitch - } - newPath.addSegment( new Segment( curSeg ) ); - - var text = new PointText( curSeg.point - [ 5, 5 ] ); - text.justification = 'center'; - if( ixswitch ) { - text.fillColor = 'black'; - }else{ - text.fillColor = 'blue'; - } - text.content = count.toString(); - count++; - - curSeg = curSeg.next; -} - -newPath.translate( [200, 0] ); -newPath.style.fillColor = 'rgb( 209, 28, 36 )'; -newPath.selected = true; - -// path1.remove(); -// path2.remove(); -// } - -// path1.selected = true; -// path1.selected = true; - diff --git a/boolean2.js b/boolean2.js deleted file mode 100644 index 4d955915..00000000 --- a/boolean2.js +++ /dev/null @@ -1,186 +0,0 @@ - -project.currentStyle.fillColor = 'black'; - -var path11 = new Path.Circle([80, 80], 50); -// var path11 = new Path.Rectangle([100, 100], [100, 100]); -var path21 = new Path.Rectangle([100, 100], [100, 100]); -// var path21 = new Path.Polygon -var newPath = new Path(); -path11.style.fillColor = 'rgb( 71, 91, 98 )' -path21.style.fillColor = 'rgb( 129, 144, 144 )' - - -// onFrame = function( event ) { - path21.rotate( 1 ); - - newPath.removeSegments(); - - var path1 = path11.clone(); - var path2 = path21.clone(); - -// console.log(path1.isClockwise()) -// console.log(path2.isClockwise()) - - // Intersections of path1 with path2 - var ixs = path1.getIntersections( path2 ); - - // TODO for both paths, first sort ixs according to curveOffset, - // so that, insert order is correct - - if( ixs.length > 0 ) { - ixs.forEach( function( item, index ){ - - var newSeg1 = new Segment( item.point ); - var newSeg2 = new Segment( item.point ); - newSeg1._ixCurveOffset = item.curveOffset; - newSeg2._ixCurveOffset = item._ixLocation.curveOffset; - newSeg1._ixOtherSeg = newSeg2; - newSeg2._ixOtherSeg = newSeg1; - - if( item.curve.segment1._ixPoints === undefined ){ - item.curve.segment1._ixPoints = [ newSeg1 ]; - } else { - item.curve.segment1._ixPoints.push( newSeg1 ); - } - if( item._ixLocation.curve.segment1._ixPoints === undefined ){ - item._ixLocation.curve.segment1._ixPoints = [ newSeg2 ]; - } else { - item._ixLocation.curve.segment1._ixPoints.push( newSeg2 ); - } - }); - - - // path1.segments.forEach( function( item, index ){ - // if( item._ixPoints ) { - // if( item._ixPoints.length > 1 ) { - // item._ixPoints.sort( compare_ixPoints ); - // } - // path1.insertSegments( item.index + 1, item._ixPoints ); - // item._ixPoints = undefined; - // } - // }); - // path2.segments.forEach( function( item, index ){ - // console.log(item._ixPoints) - // if( item._ixPoints ) { - // if( item._ixPoints.length > 1 ) { - // item._ixPoints.sort( compare_ixPoints ); - // } - // path2.insertSegments( item.index + 1, item._ixPoints ); - // item._ixPoints = undefined; - // } - // }); - - // TODO make sure path is closed - - // Walk the segments in path1, backwards (counter-clockwise) - var pathSeg = path1.lastSegment; - do{ - if( pathSeg._ixPoints ) { - if( pathSeg._ixPoints.length > 1 ) { - pathSeg._ixPoints.sort( compare_ixPoints ); - } - path1.insertSegments( pathSeg.index + 1, pathSeg._ixPoints ); - pathSeg._ixPoints = undefined; - } - pathSeg = pathSeg.previous; - } while ( pathSeg !== path1.lastSegment ); - - // Walk the segments in path2, backwards (counter-clockwise) - var pathSeg = path2.lastSegment; - do { - if( pathSeg._ixPoints ) { - if( pathSeg._ixPoints.length > 1 ) { - pathSeg._ixPoints.sort( compare_ixPoints ); - } - path2.insertSegments( pathSeg.index + 1, pathSeg._ixPoints ); - pathSeg._ixPoints = undefined; - } - pathSeg = pathSeg.previous; - } while ( pathSeg !== path2.lastSegment ); - - - // TODO Make sure, if path1 is not completely inside path2. - // TODO. This part will differ for different boolean ops. - // For Union - var startSeg = path1.firstSegment; - while( path2.contains( startSeg.point ) || startSeg._ixOtherSeg ) { - startSeg = startSeg.next; - } - - // path11.segments[startSeg.index].selected = true; - - // startSeg.selected = true; - - var curSeg; - var count = 1; - var ixswitch = true; - do { - if( !curSeg ) { - curSeg = startSeg; - } - if( curSeg._ixOtherSeg ){ - curSeg = curSeg._ixOtherSeg; - ixswitch = !ixswitch - } - newPath.addSegment( new Segment( curSeg ) ); - - // var text = new PointText( curSeg.point - [ 5, 5 ] ); - // text.justification = 'center'; - // if( ixswitch ) { - // text.fillColor = 'black'; - // }else{ - // text.fillColor = 'blue'; - // } - // text.content = count.toString(); - - count++; - - curSeg = curSeg.next; - } while( curSeg !== startSeg && count < 50); - - // console.log(count); - - - // annotateSegments( path1, 5, '#f00' ) - // annotateSegments( path2, -5, '#000' ) - - newPath.closePath() - newPath.translate( [200, 0] ); - newPath.style.fillColor = 'rgb( 209, 28, 36 )'; - newPath.fullySelected = true; - } - -// path1.remove(); -// path2.remove(); -// } - -// path1.selected = true; -// path2.selected = true; - - -// Sort new intersection points according to their -// distance along the curve, so that when we -// insert them in to the respective paths, the orientation -// of the path is maintained ( in out case clockwise ) -function compare_ixPoints( a, b ) { - if( a._ixCurveOffset < b._ixCurveOffset ) { - return -1 - } else if( a._ixCurveOffset > b._ixCurveOffset ){ - return 1; - } else { - // This shouldn't happen?! - return 0; - } -} - -// For debugging: Show a number next to each segment ina path -function annotateSegments( p, d, c ) { - var count = 0; - p.segments.forEach( function( item, index ){ - var text = new PointText( item.point - [ d, d ] ); - text.style.fillColor = c; - text.justification = 'center'; - text.content = count.toString(); - count++; - }); -} diff --git a/boolean3.js b/boolean3.js deleted file mode 100644 index 250fa484..00000000 --- a/boolean3.js +++ /dev/null @@ -1,166 +0,0 @@ -project.currentStyle.fillColor = 'black'; - -// var path11 = new Path.Circle([95, 95], 50); -// var path21 = new Path.Rectangle([100, 100], [100, 100]); - -// var path11 = new Path.Rectangle([100, 100], [100, 100]); -// var path21 = new Path.Polygon - -var path11 = new Path.Star(new Point(260, 250), 10, 50, 150); -var path21 = new Path.Star(new Point(350, 250), 10, 70, 250); -// path11.smooth(); -// path21.smooth(); - -path11.style.fillColor = 'rgb( 71, 91, 98 )' -path21.style.fillColor = 'rgb( 129, 144, 144 )' - - -function compare_ixPoints( a, b ) { - if( a.curveOffset < b.curveOffset ) { - return -1 - } else if( a.curveOffset > b.curveOffset ){ - return 1; - } else { - // This shouldn't happen?! - return 0; - } -} - -Path.prototype.getUnion = function( other ) { - var path1 = this.clone(); - var path2 = other.clone(); - // TODO do the necessary checks here. - if( !path1.isClockwise() ) path1.reverse(); - if( !path2.isClockwise() ) path2.reverse(); - - console.time("Lines"); - var ixs = path1.getIntersections( path2 ); - console.timeEnd("Lines"); - - console.time("sort"); - ixs.sort( compare_ixPoints ); - console.timeEnd("sort"); - - // console.log( ixs.length ) - - for (var i = 0, l = ixs.length; i < l; i++) { - for (var j = i + 1, l = ixs.length; j < l; j++) { - if(ixs[i].point == ixs[j].point && - ixs[i].curve.index === ixs[j].curve.index && - ixs[i]._ixLocation.curve.index === ixs[j]._ixLocation.curve.index ){ - ixs[i]._ixdup = true; - } - } - } - - var counter = 0; - - if( ixs.length > 1 ){ - ixs.forEach( function( item, index ){ - if(item._ixdup) return; - var crv1 = item.divide(); - var crv2 = item._ixLocation.divide(); - - if( !crv1 ) { - if( item.parameter === 1 ){ - crv1 = item.curve.next; - } else { - crv1 = item.curve; - } - } - if( !crv2 ) { - console.log( item._ixLocation ) - - // TODO if _ixLocation.parameter is null - // patch the _addIntersections method, - // to intersect the curve back again at that point - - if( item._ixLocation.parameter === 1 ){ - crv2 = item._ixLocation.curve.next; - } else { - crv2 = item._ixLocation.curve; - } - } - - annotateSegment(crv2.segment1, -10, "#000", false, counter++) - crv1.segment1._ixLink = crv2.segment1; - crv2.segment1._ixLink = crv1.segment1; - }); - - // annotateSegments( path1, 5, '#000', true ) - // annotateSegments( path2, -5, '#00f' ) - // path1.fullySelected = true; - // path2.fullySelected = true; - - var newPath = new Path(), - startSeg = path1.firstSegment, - curSeg, loopCut = 0; - - while( path2.contains( startSeg.point ) || startSeg._ixLink ) { - startSeg = startSeg.next; - } - - annotateSegment( startSeg, -5, "#0ff" ) - - do { - if( !curSeg ) { - curSeg = startSeg; - } - if( curSeg._ixLink ){ - newPath.addSegment( new Segment( curSeg.point, curSeg.handleIn, curSeg._ixLink.handleOut) ); - console.log( "S - " + curSeg.index + " -> " + curSeg._ixLink.index ) - curSeg = curSeg._ixLink; - } else { - newPath.addSegment( new Segment( curSeg ) ); - } - loopCut++; - curSeg = curSeg.next; - } while( curSeg !== startSeg && loopCut < 50); - - newPath.closePath(); - // newPath.style.fillColor = null - newPath.translate( [500, 0] ) - annotateSegments( newPath , -5, '#0f0' ); - - } else { - // TODO one path is either completely inside - // or outside the other one. - } - - // Debug code - // console.log( newPath.segments.length ); - // annotateSegments( path1, 5, '#000', true ) - // path1.fullySelected = true; - // annotateSegments( path2, -5, '#00f' ) - // path2.fullySelected = true; - // path1.selected = true; - path2.selected = true; -} - -path11.getUnion( path21 ) - -// For debugging: Show a number next to each segment ina path -function annotateSegments( p, d, c, hiLink ) { - hiLink = hiLink || false; - p.segments.forEach( function( item, index ){ - annotateSegment( item, d, c, hiLink ) - }); -} -function annotateSegment( s, d, c, hiLink , txt) { - hiLink = hiLink || false; - var text = new PointText( s.point - [ d, d ] ); - text.style.fillColor = c; - text.justification = 'center'; - if( txt === undefined ) - text.content = s.index.toString(); - else - text.content = txt; - if( hiLink && s._ixLink) { - annotateSegment( s._ixLink, d - 5, '#f00', false ) - } -} -function markpoint( p ) { - new Path.Circle(p, 2).style = { strokeColor: '#f0f', fillColor: '#000'} -} - -// markpoint( [236.34995495235776, 152.72369685178597 ]) diff --git a/booleanStudy.html b/booleanStudy.html index f1009cc0..b5ea3747 100644 --- a/booleanStudy.html +++ b/booleanStudy.html @@ -1,13 +1,44 @@ - + Boolean Study - - + + + - +
+

paperjs - Boolean Tests

+ +
+
+

Vector boolean operations on paperjs objects.
+ Still under development, mostly written for clarity and compatibility, + not optimised for performance, and has to be tested heavily.

+

--
+ hari

+
+ + + + + + diff --git a/booleanTests.js b/booleanTests.js new file mode 100644 index 00000000..c62388fb --- /dev/null +++ b/booleanTests.js @@ -0,0 +1,225 @@ + +paper.install(window); + + + +function runTests() { + var caption, pathA, pathB; + + var container = document.getElementById( 'container' ); + + caption = prepareTest( 'Overlapping circles', container ); + pathA = new Path.Circle(new Point(80, 110), 50); + pathB = new Path.Circle(new Point(150, 110), 70); + testBooleanStatic( pathA, pathB, caption ); + + caption = prepareTest( 'Disjoint circles', container ); + pathA = new Path.Circle(new Point(60, 110), 50); + pathB = new Path.Circle(new Point(170, 110), 50); + testBooleanStatic( pathA, pathB, caption ); + + caption = prepareTest( 'Overlapping circles - enveloping', container ); + pathA = new Path.Circle(new Point(110, 110), 100); + pathB = new Path.Circle(new Point(120, 110), 60); + testBooleanStatic( pathA, pathB, caption ); + + caption = prepareTest( 'Polygon and square', container ); + pathA = new Path.RegularPolygon(new Point(80, 110), 12, 80); + pathB = new Path.Rectangle(new Point(100, 80), [80, 80] ); + testBooleanStatic( pathA, pathB, caption ); + + caption = prepareTest( 'Circle and square (overlaps exactly on existing segments)', container ); + pathA = new Path.Circle(new Point(110, 110), 80); + pathB = new Path.Rectangle(new Point(110, 110), [80, 80] ); + testBooleanStatic( pathA, pathB, caption ); + + caption = prepareTest( 'Circle and banana (multiple intersections within same curve segment)', container ); + pathA = new Path.Circle(new Point(80, 110), 80); + pathB = new Path.Circle(new Point(130, 110), 80 ); + pathB.segments[3].point = pathB.segments[3].point.add( [ 0, -120 ] ); + testBooleanStatic( pathA, pathB, caption ); + + caption = prepareTest( 'Overlapping stars 1', container ); + pathA = new Path.Star(new Point(80, 110), 10, 20, 80); + pathB = new Path.Star(new Point(120, 110), 10, 30, 100); + testBooleanStatic( pathA, pathB, caption ); + + caption = prepareTest( 'Overlapping stars 2', container ); + pathA = new Path.Star(new Point(110, 110), 20, 20, 80); + pathB = new Path.Star(new Point(110, 110), 6, 30, 100); + testBooleanStatic( pathA, pathB, caption ); + + caption = prepareTest( 'Circles overlap exactly over each other', container ); + pathA = new Path.Circle(new Point(110, 110), 100); + pathB = new Path.Circle(new Point(110, 110), 100 ); + testBooleanStatic( pathA, pathB, caption ); + + caption = prepareTest( 'Maximum possible intersections between 2 cubic bezier curve segments - 9', container ); + pathA = new Path(); + pathA.add( new Segment( [173, 44], [-281, 268], [-86, 152] ) ); + pathA.add( new Segment( [47, 93], [-89, 100], [240, -239] ) ); + pathA.closed = true; + pathB = pathA.clone(); + pathB.rotate( -90 ); + // FIXME: hangs when I move pathA, pathB apart by [-10,0] & [10,0] or [9...] etc. + pathA.translate( [-11,0] ); + pathB.translate( [11,0] ); + testBooleanStatic( pathA, pathB, caption ); + annotatePath( pathA, null, '#008' ); + annotatePath( pathB, null, '#800' ); + view.draw(); + + caption = prepareTest( 'Glyphs imported from SVG', container ); + var group = paper.project.importSvg( document.getElementById( 'glyphsys' ) ); + pathA = group.children[0]; + pathB = group.children[1]; + testBooleanStatic( pathA, pathB, caption ); + + + function prepareTest( testName, parentNode ){ + console.log( '\n' + testName ); + var caption = document.createElement('h3'); + caption.appendChild( document.createTextNode( testName ) ); + var canvas = document.createElement('CANVAS'); + parentNode.appendChild( caption ); + parentNode.appendChild( canvas ); + paper.setup( canvas ); + return caption; + } +} + +var booleanStyle = { + fillColor: new Color( 1, 0, 0, 0.5 ), + strokeColor: new Color( 0, 0, 0 ), + strokeWidth: 2 +}; + +var pathStyleNormal = { + strokeColor: new Color( 0, 0, 0 ), + fillColor: new Color( 0, 0, 0, 0.0 ), + strokeWidth: 1 +}; + +var pathStyleBoolean = { + strokeColor: new Color( 0.8 ), + fillColor: new Color( 0, 0, 0, 0.0 ), + strokeWidth: 1 +}; + +// Better if path1 and path2 fit nicely inside a 200x200 pixels rect +function testBooleanStatic( path1, path2, caption ) { + try{ + var _p1U = path1.clone().translate( [280, 0] ); + var _p2U = path2.clone().translate( [280, 0] ); + console.time( 'Union' ); + var boolPathU = boolUnion( _p1U, _p2U ); + console.timeEnd( 'Union' ); + + var _p1I = path1.clone().translate( [560, 0] ); + var _p2I = path2.clone().translate( [560, 0] ); + console.time( 'Intersection' ); + var boolPathI = boolIntersection( _p1I, _p2I ); + console.timeEnd( 'Intersection' ); + + path1.style = path2.style = pathStyleNormal; + _p1U.style = _p2U.style = _p1I.style = _p2I.style = pathStyleBoolean; + boolPathU.style = boolPathI.style = booleanStyle; + } catch( e ){ + console.error( e.message ); + if( caption ) { caption.className += ' error'; } + paper.project.view.element.className += ' hide'; + } finally { + console.timeEnd( 'Union' ); + console.timeEnd( 'Intersection' ); + view.draw(); + } +} + + + +// ============================================================== +// On screen debug helpers +function markPoint( pnt, t, c, tc, remove ) { + if( !pnt ) return; + c = c || '#000'; + if( remove === undefined ){ remove = true; } + var cir = new Path.Circle( pnt, 2 ); + cir.style.fillColor = c; + cir.style.strokeColor = tc; + if( t !== undefined || t !== null ){ + var text = new PointText( pnt.add([0, -3]) ); + text.justification = 'center'; + text.fillColor = c; + text.content = t; + if( remove ){ + text.removeOnMove(); + } + } + if( remove ) { + cir.removeOnMove(); + } +} + +function annotatePath( path, t, c, tc, remove ) { + if( !path ) return; + var crvs = path.curves; + for (i = crvs.length - 1; i >= 0; i--) { + annotateCurve( crvs[i], t, c, tc, remove ); + } + var segs = path.segments; + for (i = segs.length - 1; i >= 0; i--) { + annotateSegment( segs[i], t, c, tc, remove, true ); + } +} + +function annotateSegment( s, t, c, tc, remove, skipCurves ) { + if( !s ) return; + c = c || '#000'; + tc = tc || '#ccc'; + t = t || s.index; + if( remove === undefined ){ remove = true; } + var crv = s.curve; + var t1 = crv.getNormal( 0 ).normalize( 10 ); + var p = s.point.clone().add( t1 ); + var cir = new Path.Circle( s.point, 2 ); + cir.style.fillColor = c; + cir.style.strokeColor = tc; + var text = new PointText( p ); + text.justification = 'center'; + text.fillColor = c; + text.content = t; + if( remove ) { + cir.removeOnMove(); + text.removeOnMove(); + } + if( !skipCurves ) { + annotateCurve( s.curveIn, null, c, tc, remove ); + annotateCurve( s.curveOut, null, c, tc, remove ); + } +} + +function annotateCurve( crv, t, c, tc, remove ) { + if( !crv ) return; + c = c || '#000'; + tc = tc || '#ccc'; + t = t || crv.index; + if( remove === undefined ){ remove = true; } + var p = crv.getPoint( 0.57 ); + var t1 = crv.getTangent( 0.57 ).normalize( -10 ); + var p2 = p.clone().add( t1 ); + var l = new Path.Line( p, p2 ).rotate( 30, p ); + var l2 = new Path.Line( p, p2 ).rotate( -30, p ); + p = crv.getPoint( 0.43 ); + var cir = new Path.Circle( p, 8 ); + var text = new PointText( p.subtract( [0, -4] ) ); + text.justification = 'center'; + text.fillColor = tc; + text.content = t; + l.style.strokeColor = l2.style.strokeColor = cir.style.fillColor = c; + if( remove ) { + l.removeOnMove(); + l2.removeOnMove(); + cir.removeOnMove(); + text.removeOnMove(); + } +} diff --git a/tags b/tags new file mode 100644 index 00000000..1e0a0293 --- /dev/null +++ b/tags @@ -0,0 +1,1108 @@ +!_TAG_FILE_FORMAT 2 /extended format/ +!_TAG_FILE_SORTED 0 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_PROGRAM_AUTHOR Patrick Walton /pwalton@mozilla.com/ +!_TAG_PROGRAM_NAME jsctags // +!_TAG_PROGRAM_URL http://github.com/pcwalton/jsctags /GitHub repository/ +!_TAG_PROGRAM_VERSION 0.1 // +Format /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Format.js /^var Format = new function() {$/;" v lineno:1 type:Object +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Format.js /^var Format = new function() {$/;" f lineno:1 type:Object function() +number /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Format.js /^\tfunction number(val, prec) {$/;" f lineno:5 type:number function(any, any) +point /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Format.js /^\tfunction point(val, prec, separator) {$/;" f lineno:12 type:string function(any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.Constructors.js /^Path.inject({ statics: new function() {$/;" f lineno:13 type:Object function() +ChangeFlag /Users/hari/Documents/Work/repo/lib/paper.js/src/item/ChangeFlag.js /^var ChangeFlag = {$/;" v lineno:13 type:Object +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Numerical.js /^var Numerical = new function() {$/;" f lineno:13 type:Object function() +SvgStyles /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgStyles.js /^var SvgStyles = Base.each({$/;" v lineno:13 type:any +PathFlattener /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFlattener.js /^var PathFlattener = Base.extend({$/;" v lineno:13 type:any +BlendMode /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^var BlendMode = {$/;" v lineno:13 type:Object +Numerical /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Numerical.js /^var Numerical = new function() {$/;" v lineno:13 type:Object +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFlattener.js /^\tinitialize: function(path) {$/;" f lineno:14 type:void function(any) +process /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\tprocess: function(blendMode, srcContext, dstContext, alpha, offset) {$/;" f lineno:14 type:void function(any, any, any, any, any) +CanvasProvider /Users/hari/Documents/Work/repo/lib/paper.js/src/util/CanvasProvider.js /^var CanvasProvider = {$/;" v lineno:15 type:Object +createPath /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.Constructors.js /^\tfunction createPath(args) {$/;" f lineno:15 type:any function(undefined) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/initialize.js /^Base.each(this, function(val, key) {$/;" f lineno:16 type:void function(any, any) +size /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Format.js /^\tfunction size(val, prec, separator) {$/;" f lineno:16 type:string function(any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^new function() {$/;" f lineno:17 type:undefined function() +Key /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Key.js /^var Key = this.Key = new function() {$/;" v lineno:17 type:Object +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Key.js /^var Key = this.Key = new function() {$/;" f lineno:17 type:Object function() +Event /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Event.js /^var Event = this.Event = Base.extend(\/** @lends Event# *\/{$/;" v lineno:17 type:any +Component /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^var Component = this.Component = Base.extend(Callback, \/** @lends Component# *\/{$/;" v lineno:17 type:any +SelectionState /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SelectionState.js /^var SelectionState = {$/;" v lineno:17 type:Object +Callback /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^var Callback = {$/;" v lineno:17 type:Object +Palette /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Palette.js /^var Palette = this.Palette = Base.extend(Callback, \/** @lends Palette# *\/{$/;" v lineno:17 type:any +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^new function() {$/;" f lineno:17 type:undefined function() +CanvasView /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^var CanvasView = View.extend(\/** @lends CanvasView# *\/{$/;" v lineno:18 type:any +GradientColor /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^var GradientColor = this.GradientColor = Color.extend(\/** @lends GradientColor# *\/{$/;" v lineno:18 type:any +options /Users/hari/Documents/Work/repo/lib/paper.js/src/load.js /^var options = {$/;" v lineno:18 type:Object +DomEvent /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^var DomEvent = {$/;" v lineno:18 type:Object +DomElement /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^var DomElement = new function() {$/;" v lineno:18 type:Object +PathFitter /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^var PathFitter = Base.extend({$/;" v lineno:18 type:any +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Event.js /^\tinitialize: function(event) {$/;" f lineno:18 type:void function(any) +attach /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\tattach: function(type, func) {$/;" f lineno:18 type:void function(any, any) +getCanvas /Users/hari/Documents/Work/repo/lib/paper.js/src/util/CanvasProvider.js /^\tgetCanvas: function(width, height) {$/;" f lineno:18 type:Global Object function(any, any) +Line /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Line.js /^var Line = this.Line = Base.extend(\/** @lends Line# *\/{$/;" v lineno:18 type:any +Gradient /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^var Gradient = this.Gradient = Base.extend(\/** @lends Gradient# *\/{$/;" v lineno:18 type:any +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^var DomElement = new function() {$/;" f lineno:18 type:Object function() +createRectangle /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.Constructors.js /^\tfunction createRectangle(\/* rect *\/) {$/;" f lineno:19 type:any function() +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^\tinitialize: function(path, error) {$/;" f lineno:19 type:void function(any, any) +GradientStop /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientStop.js /^var GradientStop = this.GradientStop = Base.extend(\/** @lends GradientStop# *\/{$/;" v lineno:19 type:any +add /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\tadd: function(el, events) {$/;" f lineno:19 type:void function(Global Object, Object) +Rectangle /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^var Rectangle = this.Rectangle = Base.extend(\/** @lends Rectangle# *\/{$/;" v lineno:20 type:any +SegmentPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SegmentPoint.js /^var SegmentPoint = Point.extend({$/;" v lineno:20 type:any +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^\tinitialize: function(stops, _type) {$/;" f lineno:20 type:any function(any, any) +HitResult /Users/hari/Documents/Work/repo/lib/paper.js/src/item/HitResult.js /^var HitResult = this.HitResult = Base.extend(\/** @lends HitResult# *\/{$/;" v lineno:20 type:any +Raster /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^var Raster = this.Raster = PlacedItem.extend(\/** @lends Raster# *\/{$/;" v lineno:20 type:any +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Palette.js /^\tinitialize: function(title, components, values) {$/;" f lineno:20 type:void function(any, any, any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/HitResult.js /^\tinitialize: function(type, item, values) {$/;" f lineno:21 type:void function(any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\t\t\tBase.each(type, function(value, key) {$/;" f lineno:21 type:void function(any, any) +PlacedSymbol /Users/hari/Documents/Work/repo/lib/paper.js/src/item/PlacedSymbol.js /^var PlacedSymbol = this.PlacedSymbol = PlacedItem.extend(\/** @lends PlacedSymbol# *\/{$/;" v lineno:21 type:any +Path /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^var Path = this.Path = PathItem.extend(\/** @lends Path# *\/{$/;" v lineno:21 type:any +set /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SegmentPoint.js /^\tset: function(x, y) {$/;" f lineno:21 type:Object function(any, any) +Style /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^var Style = Base.extend({$/;" v lineno:21 type:any +rectangle /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Format.js /^\tfunction rectangle(val, prec, separator) {$/;" f lineno:21 type:string function(any, any, any) +Group /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Group.js /^var Group = this.Group = Item.extend(\/** @lends Group# *\/{$/;" v lineno:22 type:any +Symbol /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Symbol.js /^var Symbol = this.Symbol = Base.extend(\/** @lends Symbol# *\/{$/;" v lineno:22 type:any +View /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^var View = this.View = Base.extend(Callback, \/** @lends View# *\/{$/;" v lineno:22 type:any +PlacedItem /Users/hari/Documents/Work/repo/lib/paper.js/src/item/PlacedItem.js /^var PlacedItem = this.PlacedItem = Item.extend(\/** @lends PlacedItem# *\/{$/;" v lineno:22 type:any +preventDefault /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Event.js /^\tpreventDefault: function() {$/;" f lineno:22 type:void function() +getValue /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction getValue(node, key, allowNull, index) {$/;" f lineno:22 type:null function(any, string, , ) +PointText /Users/hari/Documents/Work/repo/lib/paper.js/src/text/PointText.js /^var PointText = this.PointText = TextItem.extend(\/** @lends PointText# *\/{$/;" v lineno:22 type:any +PaperScopeItem /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScopeItem.js /^var PaperScopeItem = Base.extend(Callback, \/** @lends PaperScopeItem# *\/{$/;" v lineno:22 type:any +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\tinitialize: function(style) {$/;" f lineno:22 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgStyles.js /^}, function(entry, key) {$/;" f lineno:22 type:void function(any, any) +PathItem /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathItem.js /^var PathItem = this.PathItem = Item.extend(\/** @lends PathItem# *\/{$/;" v lineno:22 type:any +CompoundPath /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^var CompoundPath = this.CompoundPath = PathItem.extend(\/** @lends CompoundPath# *\/{$/;" v lineno:23 type:any +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tinitialize: function(element) {$/;" f lineno:23 type:void function(any) +KeyEvent /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/KeyEvent.js /^var KeyEvent = this.KeyEvent = Event.extend(\/** @lends KeyEvent# *\/{$/;" v lineno:23 type:any +Item /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^var Item = this.Item = Base.extend(Callback, {$/;" v lineno:23 type:any +ProxyContext /Users/hari/Documents/Work/repo/lib/paper.js/src/util/ProxyContext.js /^var ProxyContext = new function() {$/;" v lineno:24 type:any +PaperScript /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^var PaperScript = this.PaperScript = new function() {$/;" v lineno:24 type:Object +setAttributes /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction setAttributes(node, attrs) {$/;" f lineno:24 type:any function(any, ) +TextItem /Users/hari/Documents/Work/repo/lib/paper.js/src/text/TextItem.js /^var TextItem = this.TextItem = Item.extend(\/** @lends TextItem# *\/{$/;" v lineno:24 type:any +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/util/ProxyContext.js /^var ProxyContext = new function() {$/;" f lineno:24 type:any function() +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/KeyEvent.js /^\tinitialize: function(down, key, character, event) {$/;" f lineno:24 type:void function(any, any, any, any) +ToolEvent /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^var ToolEvent = this.ToolEvent = Event.extend(\/** @lends ToolEvent# *\/{$/;" v lineno:24 type:any +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^var PaperScript = this.PaperScript = new function() {$/;" f lineno:24 type:Object function() +Segment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^var Segment = this.Segment = Base.extend(\/** @lends Segment# *\/{$/;" v lineno:25 type:any +MouseEvent /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/MouseEvent.js /^var MouseEvent = this.MouseEvent = Event.extend(\/** @lends MouseEvent# *\/{$/;" v lineno:25 type:any +Size /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^var Size = this.Size = Base.extend(\/** @lends Size# *\/{$/;" v lineno:25 type:any +Layer /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Layer.js /^var Layer = this.Layer = Group.extend(\/** @lends Layer# *\/{$/;" v lineno:25 type:any +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\tinitialize: function(canvas) {$/;" f lineno:25 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/MouseEvent.js /^\tinitialize: function(type, event, point, target, delta) {$/;" f lineno:26 type:void function(any, any, any, any, any) +Point /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^var Point = this.Point = Base.extend(\/** @lends Point# *\/{$/;" v lineno:26 type:any +_hitTest /Users/hari/Documents/Work/repo/lib/paper.js/src/item/PlacedItem.js /^\t_hitTest: function(point, options, matrix) {$/;" f lineno:26 type:any function(any, any, any) +create /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\tfunction create(nodes, parent) {$/;" f lineno:26 type:Array[Global Object] function(any, Global Object) +stopPropagation /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Event.js /^\tstopPropagation: function() {$/;" f lineno:27 type:void function() +bound /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\t\t\t\tel.attachEvent('on' + type, func.bound = function() {$/;" f lineno:27 type:void function() +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScopeItem.js /^\tinitialize: function(activate) {$/;" f lineno:27 type:void function(any) +Curve /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^var Curve = this.Curve = Base.extend(\/** @lends Curve# *\/{$/;" v lineno:27 type:any +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Line.js /^\tinitialize: function(point1, point2, infinite) {$/;" f lineno:27 type:void function(any, any, any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientStop.js /^\tinitialize: function(arg0, arg1) {$/;" f lineno:27 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t\treturn Base.each(this._defaults, function(value, key) {$/;" f lineno:28 type:void function(any, any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tinitialize: function(tool, type, event) {$/;" f lineno:28 type:void function(any, any, any) +getX /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SegmentPoint.js /^\tgetX: function() {$/;" f lineno:28 type:void function() +CurveLocation /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^var CurveLocation = this.CurveLocation = Base.extend(\/** @lends CurveLocation# *\/{$/;" v lineno:29 type:any +ParagraphStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/style/ParagraphStyle.js /^var ParagraphStyle = this.ParagraphStyle = Style.extend(\/** @lends ParagraphStyle# *\/{$/;" v lineno:29 type:any +extend /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\textend: function(src) {$/;" f lineno:29 type:any function(any) +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\tclone: function() {$/;" f lineno:30 type:Object function() +_serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^\t_serialize: function(options, dictionary) {$/;" f lineno:31 type:any function(any, any) +paper /Users/hari/Documents/Work/repo/lib/paper.js/src/paper.js /^var paper = new function() {$/;" v lineno:32 type:any +getLum /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\tfunction getLum(r, g, b) {$/;" f lineno:32 type:number function(number, number, number) +setX /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SegmentPoint.js /^\tsetX: function(x) {$/;" f lineno:32 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/paper.js /^var paper = new function() {$/;" f lineno:32 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^\t\treturn dictionary.add(this, function() {$/;" f lineno:32 type:any function() +stop /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Event.js /^\tstop: function() {$/;" f lineno:32 type:void function() +addCurve /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFlattener.js /^\t\tfunction addCurve(segment1, segment2) {$/;" f lineno:32 type:void function(any, any) +Project /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^var Project = this.Project = PaperScopeItem.extend(\/** @lends Project# *\/{$/;" v lineno:33 type:any +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/text/TextItem.js /^\tinitialize: function(arg) {$/;" f lineno:33 type:void function(any) +CharacterStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/style/CharacterStyle.js /^var CharacterStyle = this.CharacterStyle = PathStyle.extend(\/** @lends CharacterStyle# *\/{$/;" v lineno:33 type:any +remove /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\tremove: function(el, events) {$/;" f lineno:34 type:void function(any, any) +fit /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^\tfit: function() {$/;" f lineno:34 type:Array function() +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tinitialize: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {$/;" f lineno:34 type:void function(any, any, any, any, any, any, any, any) +PaperScope /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^var PaperScope = this.PaperScope = Base.extend(\/** @lends PaperScope# *\/{$/;" v lineno:35 type:any +Change /Users/hari/Documents/Work/repo/lib/paper.js/src/item/ChangeFlag.js /^var Change = {$/;" v lineno:36 type:Object +setLum /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\tfunction setLum(r, g, b, l) {$/;" f lineno:36 type:void function(number, number, number, number) +getY /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SegmentPoint.js /^\tgetY: function() {$/;" f lineno:37 type:void function() +activate /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScopeItem.js /^\tactivate: function() {$/;" f lineno:37 type:boolean function() +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\ttoString: function() {$/;" f lineno:37 type:string function() +PathStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/style/PathStyle.js /^var PathStyle = this.PathStyle = Style.extend(\/** @lends PathStyle# *\/{$/;" v lineno:37 type:any +_choosePoint /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\t_choosePoint: function(point, toolPoint) {$/;" f lineno:38 type:null function(any, any) +_getChildren /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t_getChildren: function() {$/;" f lineno:38 type:boolean function() +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/text/PointText.js /^\tclone: function() {$/;" f lineno:38 type:any function() +createElement /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction createElement(tag, attrs) {$/;" f lineno:39 type:any function(string, ) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tinitialize: function(curve, parameter, point, distance) {$/;" f lineno:39 type:void function(any, any, any, any) +detach /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\tdetach: function(type, func) {$/;" f lineno:40 type:void function(any, any) +Matrix /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^var Matrix = this.Matrix = Base.extend(\/** @lends Matrix# *\/{$/;" v lineno:40 type:any +getPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction getPoint(node, x, y, allowNull, index) {$/;" f lineno:41 type:null function(any, string, string, , ) +_changed /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^\t_changed: function() {$/;" f lineno:41 type:void function() +setY /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SegmentPoint.js /^\tsetY: function(y) {$/;" f lineno:41 type:void function(any) +getModifiers /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Event.js /^\tgetModifiers: function() {$/;" f lineno:42 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\t\t: '{ ' + Base.each(this, function(value, key) {$/;" f lineno:42 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\t\t\tBase.each(type, function(value, key) {$/;" f lineno:43 type:void function(any, any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\tinitialize: function(script) {$/;" f lineno:43 type:void function(any) +Color /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^var Color = this.Color = Base.extend(new function() {$/;" v lineno:44 type:any +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^var Color = this.Color = Base.extend(new function() {$/;" f lineno:44 type:Object function() +create /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t\tcreate: function(item) {$/;" f lineno:44 type:any function(any) +getDistance /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction getDistance(segments, index1, index2) {$/;" f lineno:44 type:any function(any, number, number) +Tool /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^var Tool = this.Tool = PaperScopeItem.extend(\/** @lends Tool# *\/{$/;" v lineno:45 type:any +isZero /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SegmentPoint.js /^\tisZero: function() {$/;" f lineno:46 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Palette.js /^\t\tthis._values = Base.each(values, function(value, name) {$/;" f lineno:46 type:void function(any, any) +createEllipse /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.Constructors.js /^\tfunction createEllipse(\/* rect *\/) {$/;" f lineno:46 type:any function() +getPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\tgetPoint: function(event) {$/;" f lineno:46 type:any function(any) +draw /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\tdraw: function(checkRedraw) {$/;" f lineno:46 type:boolean function(any) +getContext /Users/hari/Documents/Work/repo/lib/paper.js/src/util/CanvasProvider.js /^\tgetContext: function(width, height) {$/;" f lineno:46 type:any function(any, any) +_computeParts /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFlattener.js /^\t_computeParts: function(curve, index, minT, maxT) {$/;" f lineno:47 type:void function(any, any, any, any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\tinitialize: function(view) {$/;" f lineno:47 type:void function(any) +_$_ /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\tfunction _\$_(left, operator, right) {$/;" f lineno:47 type: function(any, any, any) +resize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t\t\t\tresize: function(event) {$/;" f lineno:47 type:void function(any) +getSize /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction getSize(node, w, h, allowNull, index) {$/;" f lineno:48 type:null function(any, string, string, , undefined) +getTransform /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction getTransform(item, coordinates) {$/;" f lineno:48 type:Object function(any, ) +fitCubic /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^\tfitCubic: function(first, last, tan1, tan2) {$/;" f lineno:48 type:void function(any, any, any, any) +getPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/text/PointText.js /^\tgetPoint: function() {$/;" f lineno:48 type:any function() +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/util/ProxyContext.js /^\t\tinitialize: function(context) {$/;" f lineno:48 type:void function(any) +isActive /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScopeItem.js /^\tisActive: function() {$/;" f lineno:48 type:boolean function() +create /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tcreate: function(nodes, parent) {$/;" f lineno:50 type:any function(undefined, null) +extend /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t\textend: function(src) {$/;" f lineno:50 type:any function(any) +release /Users/hari/Documents/Work/repo/lib/paper.js/src/util/CanvasProvider.js /^\trelease: function(obj) {$/;" f lineno:51 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tinitialize: function(arg) {$/;" f lineno:51 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tinitialize: function(point) {$/;" f lineno:51 type:void function(any) +options /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\t\t\toptions: function() {$/;" f lineno:52 type:void function() +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientStop.js /^\tclone: function() {$/;" f lineno:52 type:any function() +remove /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScopeItem.js /^\tremove: function() {$/;" f lineno:52 type:boolean function() +_addOwner /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^\t_addOwner: function(color) {$/;" f lineno:52 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tinitialize: function(arg) {$/;" f lineno:52 type:void function(any) +get /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Palette.js /^\t\t\t\t\tget: function() {$/;" f lineno:53 type:any function() +getIndentation /Users/hari/Documents/Work/repo/lib/paper.js/src/util/ProxyContext.js /^\t\tgetIndentation: function() {$/;" f lineno:53 type:string function() +setSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SegmentPoint.js /^\tsetSelected: function(selected) {$/;" f lineno:53 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^\tinitialize: function(props) {$/;" f lineno:53 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\t\t\t\tDomElement.create(Base.each(this._options, function(option) {$/;" f lineno:54 type:void function(any) +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/KeyEvent.js /^\ttoString: function() {$/;" f lineno:55 type:string function() +setPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/text/PointText.js /^\tsetPoint: function(point) {$/;" f lineno:55 type:void function(any) +convertValue /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction convertValue(value, type) {$/;" f lineno:56 type: function(any, string) +_serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientStop.js /^\t_serialize: function(options, dictionary) {$/;" f lineno:56 type:any function(any, any) +find /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tfind: function(selector, root) {$/;" f lineno:56 type:any function(any, any) +set /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Palette.js /^\t\t\t\t\tset: function(val) {$/;" f lineno:56 type:void function(any) +getIntersections /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathItem.js /^\tgetIntersections: function(path) {$/;" f lineno:57 type:Array function(any) +isSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SegmentPoint.js /^\tisSelected: function() {$/;" f lineno:57 type:any function() +getSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetSegment: function() {$/;" f lineno:57 type:null function() +getSat /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\tfunction getSat(r, g, b) {$/;" f lineno:58 type:number function(any, any, any) +nameToRgbColor /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\tfunction nameToRgbColor(name) {$/;" f lineno:58 type:any function(any) +exportJson /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\texportJson: function(options) {$/;" f lineno:58 type:any function(any) +getTarget /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\tgetTarget: function(event) {$/;" f lineno:58 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^}, new function() { \/\/ Item based mouse handling:$/;" f lineno:59 type:Object function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t\t\towner['get' + stylePart] = function() {$/;" f lineno:60 type:any function() +draw /Users/hari/Documents/Work/repo/lib/paper.js/src/text/PointText.js /^\tdraw: function(ctx) {$/;" f lineno:60 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Layer.js /^\tinitialize: function(items) {$/;" f lineno:60 type:void function(any) +findAll /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tfindAll: function(selector, root) {$/;" f lineno:60 type:Array[Global Object] function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/util/ProxyContext.js /^\tBase.each(descriptions, function(description) {$/;" f lineno:61 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tinitialize: function(obj) {$/;" f lineno:61 type:void function(any) +insertChild /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tinsertChild: function(index, item, _cloning) {$/;" f lineno:61 type:null function(any, any, any) +setSat /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\tfunction setSat(r, g, b, s) {$/;" f lineno:62 type:void function(any, any, any, number) +create /Users/hari/Documents/Work/repo/lib/paper.js/src/path/SegmentPoint.js /^\t\tcreate: function(segment, key, pt) {$/;" f lineno:62 type:any function(any, any, any) +_removeOwner /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^\t_removeOwner: function(color) {$/;" f lineno:62 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Symbol.js /^\tinitialize: function(item, dontCenter) {$/;" f lineno:62 type:void function(any, any) +getOffset /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\tgetOffset: function(event, target) {$/;" f lineno:62 type:any function(any, any) +cbrt /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Numerical.js /^\tfunction cbrt(x) {$/;" f lineno:62 type:number function(number) +get /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tget: function(el, key) {$/;" f lineno:64 type: function(any, any) +_changed /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientStop.js /^\t_changed: function() {$/;" f lineno:64 type:void function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t\t\towner['set' + stylePart] = function(style) {$/;" f lineno:64 type:void function(any) +handleKey /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Key.js /^\tfunction handleKey(down, keyCode, charCode, event) {$/;" f lineno:65 type:void function(boolean, any, null, any) +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/MouseEvent.js /^\ttoString: function() {$/;" f lineno:65 type:string function() +$_ /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\tfunction \$_(operator, value) {$/;" f lineno:65 type:number function(any, any) +_changed /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t_changed: function() {$/;" f lineno:66 type:void function() +fire /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\tfire: function(type, event) {$/;" f lineno:66 type:boolean function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/util/ProxyContext.js /^\t\t\tfields[name] = function() {$/;" f lineno:66 type:any function() +_set /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t_set: function(props) {$/;" f lineno:67 type:boolean function(any) +_serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\t_serialize: function(options, dictionary) {$/;" f lineno:67 type:any function(any, any) +getPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tgetPoint: function() {$/;" f lineno:67 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_events: new function() {$/;" f lineno:67 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t\t\tBase.each(src._defaults, function(value, key) {$/;" f lineno:68 type:void function(any, any) +preventDefault /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\tpreventDefault: function(event) {$/;" f lineno:68 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/PlacedSymbol.js /^\tinitialize: function(arg0, arg1) {$/;" f lineno:68 type:void function(any, any) +importGroup /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction importGroup(node, type) {$/;" f lineno:69 type:null function(any, any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tinitialize: function(arg) {$/;" f lineno:69 type:void function(any) +reset /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Palette.js /^\treset: function() {$/;" f lineno:70 type:void function() +setPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tsetPoint: function(point) {$/;" f lineno:71 type:void function(any) +intersect /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Line.js /^\tintersect: function(line) {$/;" f lineno:72 type:null function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\t\tBase.each(handlers, function(func) {$/;" f lineno:72 type:void function(any) +_remove /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Layer.js /^\t_remove: function(notify) {$/;" f lineno:72 type:boolean function(any) +_serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Symbol.js /^\t_serialize: function(options, dictionary) {$/;" f lineno:73 type:any function(any, any) +_serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t_serialize: function(options) {$/;" f lineno:73 type:any function(any) +callEvent /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\tfunction callEvent(type, event, point, target, lastPoint, bubble) {$/;" f lineno:73 type:boolean function(string, any, any, null, undefined, undefined) +getParameterAt /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFlattener.js /^\tgetParameterAt: function(offset) {$/;" f lineno:74 type:Object function(any) +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^\tclone: function() {$/;" f lineno:74 type:Object function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Symbol.js /^\t\treturn dictionary.add(this, function() {$/;" f lineno:74 type:any function() +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tinitialize: function(arg0, arg1, arg2, arg3) {$/;" f lineno:74 type:void function(any, any, any, any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tinitialize: function(object, position) {$/;" f lineno:74 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t\t\t\tsrc[set] = function(value) {$/;" f lineno:75 type:void function(any) +remove /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Palette.js /^\tremove: function() {$/;" f lineno:75 type:void function() +getLeading /Users/hari/Documents/Work/repo/lib/paper.js/src/style/CharacterStyle.js /^\tgetLeading: function() {$/;" f lineno:75 type:number function() +change /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\t\t\t\tchange: function() {$/;" f lineno:75 type:void function() +_needsRedraw /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\t_needsRedraw: function() {$/;" f lineno:75 type:void function() +isZero /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Numerical.js /^\t\tisZero: function(val) {$/;" f lineno:76 type:boolean function(any) +set /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tset: function(el, key, value) {$/;" f lineno:76 type:Global Object function(Global Object, any, undefined) +stopPropagation /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\tstopPropagation: function(event) {$/;" f lineno:77 type:void function(any) +setPathData /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathItem.js /^\tsetPathData: function(data) {$/;" f lineno:78 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/text/PointText.js /^}, new function() {$/;" f lineno:78 type:Object function() +getPoint1 /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetPoint1: function() {$/;" f lineno:78 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/util/ProxyContext.js /^\t\t\tfields['set' + capitalized] = function(value) {$/;" f lineno:80 type:any function(any) +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tclone: function() {$/;" f lineno:80 type:any function() +hexToRgbColor /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\tfunction hexToRgbColor(string) {$/;" f lineno:81 type:any function(any) +getFontStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/style/CharacterStyle.js /^\tgetFontStyle: function() {$/;" f lineno:81 type:string function() +responds /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\tresponds: function(type) {$/;" f lineno:81 type:boolean function(any) +keydown /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Key.js /^\t\tkeydown: function(event) {$/;" f lineno:82 type:void function(any) +reduce /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\treduce: function() {$/;" f lineno:82 type:Object function() +_getBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/text/PointText.js /^\t\t_getBounds: function(getter, matrix) {$/;" f lineno:82 type:any function(any, any) +getLastPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tgetLastPoint: function() {$/;" f lineno:82 type:any function() +setPoint1 /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tsetPoint1: function(point) {$/;" f lineno:82 type:void function(any) +integrate /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Numerical.js /^\t\tintegrate: function(f, a, b, n) {$/;" f lineno:83 type:number function(any, any, any, any) +click /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\t\t\t\tclick: function() {$/;" f lineno:83 type:void function() +getMinDistance /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^\tgetMinDistance: function() {$/;" f lineno:83 type:void function() +getCurve /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetCurve: function(\/* uncached *\/) {$/;" f lineno:84 type:any function() +extend /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\textend: function(src) {$/;" f lineno:85 type:any function(any) +getNextSibling /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Layer.js /^\tgetNextSibling: function() {$/;" f lineno:85 type:null function() +stop /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\tstop: function(event) {$/;" f lineno:85 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tinitialize: function(gradient, origin, destination, hilite) {$/;" f lineno:85 type:void function(any, any, any, any) +getSymbol /Users/hari/Documents/Work/repo/lib/paper.js/src/item/PlacedSymbol.js /^\tgetSymbol: function() {$/;" f lineno:85 type:void function() +inject /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\t\tinject: function(\/* src, ... *\/) {$/;" f lineno:86 type:Object function() +setLastPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tsetLastPoint: function(lastPoint) {$/;" f lineno:86 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/util/ProxyContext.js /^\t\t\tfields['get' + capitalized] = function() {$/;" f lineno:86 type:any function() +compile /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\tfunction compile(code) {$/;" f lineno:86 type: function(Global Object) +determineAngle /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction determineAngle(path, segments, type, center) {$/;" f lineno:87 type: function(any, any, string, any) +setMinDistance /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^\tsetMinDistance: function(minDistance) {$/;" f lineno:87 type:void function(any) +getStops /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^\tgetStops: function() {$/;" f lineno:87 type:void function() +addCurve /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^\taddCurve: function(curve) {$/;" f lineno:87 type:void function(any) +getCoord /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathItem.js /^\t\tfunction getCoord(index, coord, update) {$/;" f lineno:88 type:any function(number, string, ) +multiply /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tmultiply: function() {$/;" f lineno:88 type:void function() +setSymbol /Users/hari/Documents/Work/repo/lib/paper.js/src/item/PlacedSymbol.js /^\tsetSymbol: function(symbol) {$/;" f lineno:89 type:void function(any) +Line /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.Constructors.js /^\t\tLine: function(\/* from, to *\/) {$/;" f lineno:89 type:any function() +_clone /Users/hari/Documents/Work/repo/lib/paper.js/src/text/TextItem.js /^\t_clone: function(copy) {$/;" f lineno:89 type:any function(any) +getPreviousSibling /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Layer.js /^\tgetPreviousSibling: function() {$/;" f lineno:90 type:null function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^DomEvent.requestAnimationFrame = new function() {$/;" f lineno:91 type:void function(any, any) function() +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Group.js /^\tinitialize: function(arg) {$/;" f lineno:91 type:void function(any) +setStops /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^\tsetStops: function(stops) {$/;" f lineno:91 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\t\tBase.each(obj, function(value, key) {$/;" f lineno:92 type:void function(any, any) +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tclone: function() {$/;" f lineno:92 type:any function() +smooth /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tsmooth: function() {$/;" f lineno:92 type:void function() +handleEvent /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\tfunction handleEvent(view, type, event, point, lastPoint) {$/;" f lineno:92 type:any function(Object, string, any, any, undefined) +remove /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\tremove: function() {$/;" f lineno:92 type:boolean function() +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tinitialize: function(arg0, arg1) {$/;" f lineno:92 type:void function(any, any) +getSide /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Line.js /^\tgetSide: function(point) {$/;" f lineno:92 type:number function(any) +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tclone: function() {$/;" f lineno:93 type:any function() +getPoint2 /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetPoint2: function() {$/;" f lineno:93 type:any function() +screen /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tscreen: function() {$/;" f lineno:94 type:void function() +generateBezier /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^\tgenerateBezier: function(first, last, uPrime, tan1, tan2) {$/;" f lineno:95 type:Array function(any, any, any, any, any) +isInserted /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Layer.js /^\tisInserted: function() {$/;" f lineno:95 type:boolean function() +getContent /Users/hari/Documents/Work/repo/lib/paper.js/src/text/TextItem.js /^\tgetContent: function() {$/;" f lineno:95 type:void function() +install /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\t\tinstall: function(type) {$/;" f lineno:95 type:void function(any) +set /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tset: function(a, c, b, d, tx, ty) {$/;" f lineno:96 type:Object function(any, any, any, any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\t\t\t\t\tBase.each(events, function(entry, key) {$/;" f lineno:96 type:void function(any, any) +setPoint2 /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tsetPoint2: function(point) {$/;" f lineno:97 type:void function(any) +getStyles /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tgetStyles: function(el) {$/;" f lineno:97 type:any function(any) +_changed /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Symbol.js /^\t_changed: function(flags) {$/;" f lineno:97 type:void function(any) +getPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathItem.js /^\t\tfunction getPoint(index, update) {$/;" f lineno:97 type:any function(number, ) +getView /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\tgetView: function() {$/;" f lineno:97 type:void function() +getDownPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tgetDownPoint: function() {$/;" f lineno:97 type:any function() +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/item/PlacedSymbol.js /^\tclone: function() {$/;" f lineno:98 type:any function() +equals /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\tequals: function(obj1, obj2) {$/;" f lineno:99 type:boolean function(any, any) +setContent /Users/hari/Documents/Work/repo/lib/paper.js/src/text/TextItem.js /^\tsetContent: function(content) {$/;" f lineno:99 type:void function(any) +_changed /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t_changed: function(flags) {$/;" f lineno:100 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Symbol.js /^\t\tBase.each(this._instances, function(item) {$/;" f lineno:100 type:void function(any) +getType /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tgetType: function() {$/;" f lineno:100 type:void function() +getOffset /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\t\tfunction getOffset(offset) {$/;" f lineno:100 type:any function(any) +_changed /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Group.js /^\t_changed: function(flags) {$/;" f lineno:100 type:void function(any) +checkKeys /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\t\tfunction checkKeys(o1, o2) {$/;" f lineno:100 type:boolean function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\t\trequest(function(time) {$/;" f lineno:100 type:void function(any) +overlay /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\toverlay: function() {$/;" f lineno:100 type:void function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t\t\t\tsrc[get] = function() {$/;" f lineno:101 type:void function() +findRoot /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Numerical.js /^\t\tfindRoot: function(f, df, x, a, b, n, tolerance) {$/;" f lineno:101 type:any function(any, any, any, any, any, any, any) +setDownPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tsetDownPoint: function(downPoint) {$/;" f lineno:101 type:void function(any) +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tclone: function() {$/;" f lineno:101 type:any function() +getMaxDistance /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^\tgetMaxDistance: function() {$/;" f lineno:102 type:void function() +getStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tgetStyle: function(el, key) {$/;" f lineno:102 type:null function(any, any) +isEmpty /Users/hari/Documents/Work/repo/lib/paper.js/src/item/PlacedSymbol.js /^\tisEmpty: function() {$/;" f lineno:102 type:any function() +keypress /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Key.js /^\t\tkeypress: function(event) {$/;" f lineno:102 type:void function(any) +determineType /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction determineType(path, segments) {$/;" f lineno:102 type:string function(any, any) +getFirstSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tgetFirstSegment: function() {$/;" f lineno:103 type:any function() +getPath /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetPath: function() {$/;" f lineno:104 type:any function() +getLabel /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tgetLabel: function() {$/;" f lineno:104 type:void function() +getOptions /Users/hari/Documents/Work/repo/lib/paper.js/src/item/HitResult.js /^\t\tgetOptions: function(options) {$/;" f lineno:105 type:any function(any) +isEmpty /Users/hari/Documents/Work/repo/lib/paper.js/src/text/TextItem.js /^\tisEmpty: function() {$/;" f lineno:105 type:boolean function() +isColinear /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\t\tfunction isColinear(i, j) {$/;" f lineno:105 type:any function(number, number) +soft-light /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\t'soft-light': function() {$/;" f lineno:106 type:void function() +rgb-hsb /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t'rgb-hsb': function(color) {$/;" f lineno:106 type:any function(Object) +getTool /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\tgetTool: function() {$/;" f lineno:106 type:any function() +setStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tsetStyle: function(el, key, value) {$/;" f lineno:106 type:Global Object function(Global Object, undefined, undefined) +_serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\t_serialize: function(options, dictionary) {$/;" f lineno:106 type:any function(any, any) +_getBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/item/PlacedSymbol.js /^\t_getBounds: function(getter, matrix) {$/;" f lineno:106 type:any function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\t\t\t\t\t\tsrc['get' + part] = function() {$/;" f lineno:106 type:any function() +uninstall /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\t\tuninstall: function(type) {$/;" f lineno:106 type:void function(any) +setMaxDistance /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^\tsetMaxDistance: function(maxDistance) {$/;" f lineno:106 type:void function(any) +getHandle1 /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetHandle1: function() {$/;" f lineno:108 type:any function() +setLabel /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tsetLabel: function(label) {$/;" f lineno:108 type:void function(any) +activate /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Layer.js /^\tactivate: function() {$/;" f lineno:109 type:void function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Callback.js /^\t\t\t\t\t\tsrc['set' + part] = function(func) {$/;" f lineno:109 type:void function(any) +_getClipItem /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Group.js /^\t_getClipItem: function() {$/;" f lineno:109 type: function() +reset /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\treset: function() {$/;" f lineno:110 type:Object function() +getRampPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientStop.js /^\tgetRampPoint: function() {$/;" f lineno:110 type:void function() +remove /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tremove: function() {$/;" f lineno:110 type:boolean function() +getDefinition /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Symbol.js /^\tgetDefinition: function() {$/;" f lineno:111 type:void function() +getSize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetSize: function() {$/;" f lineno:111 type:void function() +focus /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\t\tfocus: function() {$/;" f lineno:112 type:void function() +getDistance /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Line.js /^\tgetDistance: function(point) {$/;" f lineno:112 type:number function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tinitialize: function(arg0, arg1, arg2, arg3, arg4, arg5) {$/;" f lineno:112 type:void function(any, any, any, any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Layer.js /^}, new function () {$/;" f lineno:112 type:Object function() +setHandle1 /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tsetHandle1: function(point) {$/;" f lineno:112 type:void function(any) +draw /Users/hari/Documents/Work/repo/lib/paper.js/src/item/PlacedSymbol.js /^\tdraw: function(ctx, param) {$/;" f lineno:113 type:void function(any, any) +insert /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Layer.js /^\tfunction insert(above) {$/;" f lineno:113 type:boolean function(any) function(boolean) +evaluate /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFlattener.js /^\tevaluate: function(offset, type) {$/;" f lineno:113 type:any function(any, any) +keyup /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Key.js /^\t\tkeyup: function(event) {$/;" f lineno:113 type:void function(any) +getOptions /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tgetOptions: function() {$/;" f lineno:113 type:void function() +setRampPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientStop.js /^\tsetRampPoint: function(rampPoint) {$/;" f lineno:114 type:void function(any) +getMiddlePoint /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tgetMiddlePoint: function() {$/;" f lineno:114 type:void function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Layer.js /^\t\treturn function(item) {$/;" f lineno:114 type:boolean function(any) +getLastSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tgetLastSegment: function() {$/;" f lineno:114 type:any function() +getCode /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\t\tfunction getCode(node) {$/;" f lineno:114 type:string function(any) +importPoly /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction importPoly(node, type) {$/;" f lineno:115 type:any function(any, any) +blur /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\t\tblur: function() {$/;" f lineno:115 type:void function() +setSize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tsetSize: function() {$/;" f lineno:115 type:void function() +setDefinition /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Symbol.js /^\tsetDefinition: function(item \/*, dontCenter *\/) {$/;" f lineno:115 type:void function(any) +hard-light /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\t'hard-light': function() {$/;" f lineno:115 type:void function() +getIndex /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetIndex: function() {$/;" f lineno:116 type:any function() +setOptions /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tsetOptions: function(options) {$/;" f lineno:117 type:void function(any) +_onMouseDown /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\t\t_onMouseDown: function(event, point) {$/;" f lineno:118 type:void function(any, any) +equals /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^\tequals: function(gradient) {$/;" f lineno:118 type:boolean function(any) +drawPart /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFlattener.js /^\tdrawPart: function(ctx, from, to) {$/;" f lineno:118 type:void function(any, any, any) +getFixedDistance /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^\tgetFixedDistance: function() {$/;" f lineno:119 type: function() +getGradient /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tgetGradient: function() {$/;" f lineno:119 type:void function() +hasClass /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\thasClass: function(el, cls) {$/;" f lineno:119 type:boolean function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\t\tfunction(name) {$/;" f lineno:119 type:void function(any) +getCharacterStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/text/TextItem.js /^\tgetCharacterStyle: function() {$/;" f lineno:119 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\treturn function(callback, element) {$/;" f lineno:120 type:void function(any, any) +evaluate /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\tevaluate: function(code) {$/;" f lineno:120 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t\t\t\towner[get] = function() {$/;" f lineno:121 type:any function() +replaceCode /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\t\tfunction replaceCode(node, str) {$/;" f lineno:121 type:void function(any, string) +color-dodge /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\t'color-dodge': function() {$/;" f lineno:122 type:void function() +hsb-rgb /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t'hsb-rgb': function(color) {$/;" f lineno:122 type:any function(Object) +addClass /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\taddClass: function(el, cls) {$/;" f lineno:123 type:void function(any, any) +install /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\t\t\t\tinstall: function() {$/;" f lineno:123 type:void function() +setGradient /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tsetGradient: function(gradient) {$/;" f lineno:123 type:void function(any) +isArc /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\t\tfunction isArc(i) {$/;" f lineno:123 type:any function(number) +setMiddlePoint /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tsetMiddlePoint: function(middlePoint) {$/;" f lineno:123 type:void function(any) +getValue /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tgetValue: function() {$/;" f lineno:123 type:void function() +getHandle2 /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetHandle2: function() {$/;" f lineno:123 type:any function() +setCharacterStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/text/TextItem.js /^\tsetCharacterStyle: function(style) {$/;" f lineno:123 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/style/Style.js /^\t\t\t\towner[set] = function(value) {$/;" f lineno:124 type:void function(any) +setFixedDistance /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^\tsetFixedDistance: function(distance) {$/;" f lineno:124 type:void function(any) +importPath /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction importPath(node) {$/;" f lineno:126 type:any function(any) +getSegments /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetSegments: function() {$/;" f lineno:126 type:void function() +uninstall /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\t\t\t\tuninstall: function() {$/;" f lineno:126 type:void function() +getCurves /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tgetCurves: function() {$/;" f lineno:126 type:Array function() +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\ttoString: function() {$/;" f lineno:127 type:string function() +setHandle2 /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tsetHandle2: function(point) {$/;" f lineno:127 type:void function(any) +setValue /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tsetValue: function(value) {$/;" f lineno:127 type:void function(any) +removeClass /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tremoveClass: function(el, cls) {$/;" f lineno:127 type:void function(any, any) +_onMouseUp /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\t\t_onMouseUp: function(event, point) {$/;" f lineno:128 type:void function(any, any) +getOffset /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetOffset: function() {$/;" f lineno:128 type:any function() +color-burn /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\t'color-burn': function() {$/;" f lineno:128 type:void function() +setSegments /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tsetSegments: function(segments) {$/;" f lineno:130 type:void function(any) +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tinitialize: function(arg0, arg1) {$/;" f lineno:131 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomEvent.js /^\t\ttimer = setInterval(function() {$/;" f lineno:131 type:void function() +remove /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tremove: function(el) {$/;" f lineno:132 type:void function(any) +getCurrentStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\tgetCurrentStyle: function() {$/;" f lineno:132 type:void function() +solveQuadratic /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Numerical.js /^\t\tsolveQuadratic: function(a, b, c, roots, tolerance) {$/;" f lineno:133 type:number function(any, any, any, any, any) +darken /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tdarken: function() {$/;" f lineno:134 type:void function() +getWidth /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetWidth: function() {$/;" f lineno:134 type:any function() +getRange /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tgetRange: function() {$/;" f lineno:135 type:Array function() +install /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\tinstall: function(scope) {$/;" f lineno:135 type:void function(any) +getDelta /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tgetDelta: function() {$/;" f lineno:135 type:void function() +scale /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tscale: function(scale, center) {$/;" f lineno:135 type:Object function(any, any) +setCurrentStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\tsetCurrentStyle: function(style) {$/;" f lineno:136 type:void function(any) +LinearGradient /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^var LinearGradient = this.LinearGradient = Gradient.extend(\/** @lends LinearGradient# *\/{$/;" v lineno:136 type:any +_serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_serialize: function(options, dictionary) {$/;" f lineno:137 type:Array function(any, any) +importGradient /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction importGradient(node, type) {$/;" f lineno:137 type:null function(any, any) +removeChildren /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tremoveChildren: function(el) {$/;" f lineno:137 type:void function(any) +walkAst /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\t\tfunction walkAst(node) {$/;" f lineno:137 type:void function(any) +getSegment1 /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetSegment1: function() {$/;" f lineno:138 type:void function() +place /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Symbol.js /^\tplace: function(position) {$/;" f lineno:139 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\t\tBase.each(['project', 'view', 'tool'], function(key) {$/;" f lineno:139 type:void function(any) +setRange /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tsetRange: function(min, max) {$/;" f lineno:140 type:void function(any, any) +getFirstCurve /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tgetFirstCurve: function() {$/;" f lineno:140 type:any function() +lighten /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tlighten: function() {$/;" f lineno:140 type:void function() +getCurveOffset /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetCurveOffset: function() {$/;" f lineno:140 type:boolean function() +rgb-hsl /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t'rgb-hsl': function(color) {$/;" f lineno:140 type:any function(Object) +serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\tfunction serialize(fields, compact) {$/;" f lineno:141 type:void function(undefined, boolean) +getBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tgetBounds: function(el, viewport) {$/;" f lineno:142 type:any function(any, any) +install /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t\t\tinstall: function() {$/;" f lineno:142 type:void function() +get /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\t\t\t\tget: function() {$/;" f lineno:143 type:any function() +getHeight /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetHeight: function() {$/;" f lineno:144 type:any function() +getFirstSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetFirstSegment: function() {$/;" f lineno:144 type:any function() +getMin /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tgetMin: function() {$/;" f lineno:145 type:any function() +setDelta /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tsetDelta: function(delta) {$/;" f lineno:146 type:void function(any) +difference /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tdifference: function() {$/;" f lineno:146 type:void function() +getIndex /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\tgetIndex: function() {$/;" f lineno:147 type:void function() +set /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tset: function(width, height) {$/;" f lineno:147 type:Object function(any, any) +getSegment2 /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetSegment2: function() {$/;" f lineno:148 type:void function() +_serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\t_serialize: function(options) {$/;" f lineno:148 type:any function(any) +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Symbol.js /^\tclone: function() {$/;" f lineno:148 type:any function() +isEmpty /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tisEmpty: function() {$/;" f lineno:148 type:boolean function() +isDown /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Key.js /^\t\tisDown: function(key) {$/;" f lineno:149 type:boolean function(any) +setMin /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tsetMin: function(min) {$/;" f lineno:149 type:void function(any) +getLastCurve /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tgetLastCurve: function() {$/;" f lineno:151 type:any function() +RadialGradient /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Gradient.js /^var RadialGradient = this.RadialGradient = Gradient.extend(\/** @lends RadialGradient# *\/{$/;" v lineno:152 type:any +read /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\tread: function(list, start, length, clone, readNull) {$/;" f lineno:152 type:any function(any, any, any, any, any) +getMax /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tgetMax: function() {$/;" f lineno:153 type:any function() +getColor /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientStop.js /^\tgetColor: function() {$/;" f lineno:153 type:void function() +uninstall /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t\t\tuninstall: function() {$/;" f lineno:153 type:void function() +getParameter /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetParameter: function(\/* uncached *\/) {$/;" f lineno:154 type:any function() +getLastSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetLastSegment: function() {$/;" f lineno:154 type:any function() +_changed /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\t_changed: function(point) {$/;" f lineno:154 type:void function(any) +getPathData /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tgetPathData: function(\/* precision *\/) {$/;" f lineno:156 type:string function() +getCount /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tgetCount: function() {$/;" f lineno:156 type:any function() +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tclone: function() {$/;" f lineno:156 type:any function() +getViewportBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tgetViewportBounds: function(el) {$/;" f lineno:157 type:any function(any) +_onMouseMove /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\t\t_onMouseMove: function(event, point) {$/;" f lineno:157 type:void function(any, any) +isClipped /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Group.js /^\tisClipped: function() {$/;" f lineno:157 type:boolean function() +setMax /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tsetMax: function(max) {$/;" f lineno:157 type:void function(any) +getSelectedItems /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\tgetSelectedItems: function() {$/;" f lineno:157 type:Array function() +setColor /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientStop.js /^\tsetColor: function(color) {$/;" f lineno:157 type:void function(any) +getPpi /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetPpi: function() {$/;" f lineno:158 type:any function() +getOrigin /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tgetOrigin: function() {$/;" f lineno:158 type:void function() +getPath /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetPath: function() {$/;" f lineno:158 type:void function() +exclusion /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\texclusion: function() {$/;" f lineno:158 type:void function() +hsl-rgb /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t'hsl-rgb': function(color) {$/;" f lineno:159 type:any function(Object) +setClipped /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Group.js /^\tsetClipped: function(clipped) {$/;" f lineno:161 type:void function(any) +getStep /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tgetStep: function() {$/;" f lineno:161 type:any function() +solveCubic /Users/hari/Documents/Work/repo/lib/paper.js/src/util/Numerical.js /^\t\tsolveCubic: function(a, b, c, d, roots, tolerance) {$/;" f lineno:162 type:number function(any, any, any, any, any, any) +setOrigin /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tsetOrigin: function(origin) {$/;" f lineno:162 type:void function(any) +setup /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\tsetup: function(canvas) {$/;" f lineno:164 type:Object function(any) +setCount /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tsetCount: function(count) {$/;" f lineno:164 type:void function(any) +getCurves /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetCurves: function() {$/;" f lineno:164 type: function() +hue /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\thue: function() {$/;" f lineno:165 type:void function() +setStep /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\tsetStep: function(step) {$/;" f lineno:165 type:void function(any) +draw /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Group.js /^\tdraw: function(ctx, param) {$/;" f lineno:167 type:void function(any, any) +getOffset /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tgetOffset: function(el, viewport) {$/;" f lineno:167 type:any function(any, any) +_contains /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\t_contains: function(point) {$/;" f lineno:167 type: function(any) +equals /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientStop.js /^\tequals: function(stop) {$/;" f lineno:167 type:boolean function(any) +_serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\t_serialize: function(options) {$/;" f lineno:167 type:Array function(any) +getIndex /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetIndex: function() {$/;" f lineno:168 type:any function() +_handleFrame /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t_handleFrame: function(request) {$/;" f lineno:168 type:void function(any) +translate /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\ttranslate: function(point) {$/;" f lineno:168 type:Object function(any) +getPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetPoint: function() {$/;" f lineno:169 type:any function() +reset /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/Component.js /^\treset: function() {$/;" f lineno:169 type:void function() +saturation /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tsaturation: function() {$/;" f lineno:170 type:void function() +_changed /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_changed: function(flags) {$/;" f lineno:170 type:void function(any) +reparameterize /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^\treparameterize: function(first, last, u, curve) {$/;" f lineno:170 type:void function(any, any, any, any) +getSize /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tgetSize: function(el) {$/;" f lineno:171 type:any function(any) +exportGroup /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction exportGroup(item) {$/;" f lineno:172 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^CanvasView.inject(new function() {$/;" f lineno:174 type:Object function() +clear /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\tclear: function() {$/;" f lineno:174 type:void function() +luminosity /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tluminosity: function() {$/;" f lineno:175 type:void function() +getContext /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetContext: function(\/* modify *\/) {$/;" f lineno:175 type:any function() +findRoot /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^\tfindRoot: function(curve, point, u) {$/;" f lineno:177 type:number function(any, any, any) +toPaddedString /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\tfunction toPaddedString(number, length) {$/;" f lineno:178 type:string function(number, number) +isInvisible /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tisInvisible: function(el) {$/;" f lineno:178 type:any function(any) +getNext /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetNext: function() {$/;" f lineno:179 type:null function() +color /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tcolor: function() {$/;" f lineno:179 type:void function() +getItem /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tgetItem: function() {$/;" f lineno:179 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t\t\tDomEvent.requestAnimationFrame(function() {$/;" f lineno:179 type:void function() +set /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tset: function(x, y, width, height) {$/;" f lineno:180 type:Object function(any, any, any, any) +image /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\timage: function (node) {$/;" f lineno:181 type:any function(any) +getPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tgetPoint: function() {$/;" f lineno:182 type:void function() +_updateSelection /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\t_updateSelection: function(item) {$/;" f lineno:182 type:void function(any) +getTangent /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetTangent: function() {$/;" f lineno:183 type:boolean function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\t\traster.attach('load', function() {$/;" f lineno:183 type:void function() +contains /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tcontains: function(point) {$/;" f lineno:183 type:boolean function(any) +rgb-gray /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t'rgb-gray': function(color) {$/;" f lineno:184 type:any function(Object) +add /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tadd: function() {$/;" f lineno:184 type:void function() +getFirstCurve /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetFirstCurve: function() {$/;" f lineno:184 type:any function() +isInView /Users/hari/Documents/Work/repo/lib/paper.js/src/browser/DomElement.js /^\t\tisInView: function(el) {$/;" f lineno:185 type:boolean function(any) +remove /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\tremove: function() {$/;" f lineno:185 type:void function() +exportRaster /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction exportRaster(item) {$/;" f lineno:186 type:any function(any) +setPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tsetPoint: function(point) {$/;" f lineno:186 type:void function(any) +exportFrames /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\t\texportFrames: function(param) {$/;" f lineno:187 type:void function(any) +_hitTest /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\t_hitTest: function(point, options) {$/;" f lineno:187 type:null function(any, any) +add /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tadd: function(size) {$/;" f lineno:189 type:any function(any) +subtract /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tsubtract: function() {$/;" f lineno:190 type:void function() +set /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tset: function(x, y) {$/;" f lineno:190 type:Object function(any, any) +setContext /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tsetContext: function(context) {$/;" f lineno:192 type:void function(any) +gray-rgb /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t'gray-rgb': function(color) {$/;" f lineno:192 type:any function(Object) +getPrevious /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetPrevious: function() {$/;" f lineno:192 type:null function() +symbol /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\tsymbol: function(node, type) {$/;" f lineno:194 type:any function(any, any) +getLastCurve /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetLastCurve: function() {$/;" f lineno:194 type:any function() +getPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tgetPoint: function(\/* dontLink *\/) {$/;" f lineno:194 type:any function() +RoundRectangle /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.Constructors.js /^\t\tRoundRectangle: function(\/* rect, radius *\/) {$/;" f lineno:194 type:any function() +getNormal /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetNormal: function() {$/;" f lineno:195 type:boolean function() +getCanvas /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetCanvas: function() {$/;" f lineno:196 type:any function() +average /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\taverage: function() {$/;" f lineno:196 type:void function() +draw /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tdraw: function(ctx, param) {$/;" f lineno:196 type:void function(any, any) +exportText /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction exportText(item) {$/;" f lineno:197 type:any function(any) +setItem /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\tsetItem: function(item) {$/;" f lineno:197 type:void function(any) +gray-hsb /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t'gray-hsb': function(color) {$/;" f lineno:197 type:any function(Object) +rotate /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\trotate: function(angle, center) {$/;" f lineno:198 type:Object function(any, any) +peek /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\tpeek: function(list, start) {$/;" f lineno:198 type:any function(any, any) +getHandleIn /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tgetHandleIn: function() {$/;" f lineno:200 type:void function() +selectAll /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\tselectAll: function() {$/;" f lineno:200 type:void function() +setPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tsetPoint: function(point) {$/;" f lineno:200 type:void function(any) +getDestination /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tgetDestination: function() {$/;" f lineno:200 type:void function() +get /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScope.js /^\t\tget: function(id) {$/;" f lineno:200 type:null function(any) +gray-hsl /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t'gray-hsl': function(color) {$/;" f lineno:201 type:any function(Object) +_animateItem /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t_animateItem: function(item, animate) {$/;" f lineno:201 type:void function(any, any) +negation /Users/hari/Documents/Work/repo/lib/paper.js/src/util/BlendMode.js /^\t\t\tnegation: function() {$/;" f lineno:202 type:void function() +evaluate /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^\tevaluate: function(degree, curve, t) {$/;" f lineno:202 type:any function(any, any, any) +use /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\tuse: function(node, type) {$/;" f lineno:203 type:null function(any, any) +isSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tisSelected: function() {$/;" f lineno:204 type:any function() +setHandleIn /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tsetHandleIn: function(point) {$/;" f lineno:204 type:void function(any) +setDestination /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tsetDestination: function(destination) {$/;" f lineno:204 type:void function(any) +exportFrame /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\t\t\tfunction exportFrame(param) {$/;" f lineno:204 type:void function(any) +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/ToolEvent.js /^\ttoString: function() {$/;" f lineno:204 type:string function() +getPathData /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetPathData: function(\/* precision *\/) {$/;" f lineno:205 type:string function() +evaluate /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\tfunction evaluate(code, scope) {$/;" f lineno:206 type:any function(Global Object, any) +getDistance /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tgetDistance: function() {$/;" f lineno:207 type:void function() +setSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tsetSelected: function(selected) {$/;" f lineno:208 type:void function(any) +deselectAll /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\tdeselectAll: function() {$/;" f lineno:208 type:void function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\t\t\t\tvar out = view.exportImage(uri, function() {$/;" f lineno:208 type:void function() +exportPath /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction exportPath(item) {$/;" f lineno:209 type:null function(any) +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tclone: function() {$/;" f lineno:209 type:any function() +readAll /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\treadAll: function(list, start, clone) {$/;" f lineno:211 type:Array function(any, any, any) +divide /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tdivide: function() {$/;" f lineno:211 type:any function() +initialize /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\tinitialize: function(arg) {$/;" f lineno:212 type:any function(any) +getValues /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetValues: function() {$/;" f lineno:213 type:any function() +setCanvas /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tsetCanvas: function(canvas) {$/;" f lineno:213 type:void function(any) +getSize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tgetSize: function(\/* dontLink *\/) {$/;" f lineno:213 type:any function() +addCurve /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction addCurve(seg1, seg2, skipLine) {$/;" f lineno:214 type:void function(any, any, boolean) +split /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\tsplit: function() {$/;" f lineno:216 type:any function() +chordLengthParameterize /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^\tchordLengthParameterize: function(first, last) {$/;" f lineno:216 type:Array[number] function(any, any) +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\ttoString: function() {$/;" f lineno:216 type:string function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^}, new function() { \/\/ Injection scope for PostScript-like drawing functions$/;" f lineno:217 type:Object function() +getPoints /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetPoints: function() {$/;" f lineno:217 type:Array function() +setSize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tsetSize: function(size) {$/;" f lineno:218 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\t\t\t(function() {$/;" f lineno:218 type:void function() +getHandleOut /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tgetHandleOut: function() {$/;" f lineno:219 type:void function() +getCurrentPath /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\tfunction getCurrentPath(that) {$/;" f lineno:222 type:any function(Object) +circle /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\tcircle: function(node) {$/;" f lineno:223 type:any function(any) +setHandleOut /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tsetHandleOut: function(point) {$/;" f lineno:223 type:void function(any) +_handleFrameItems /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t_handleFrameItems: function(event) {$/;" f lineno:224 type:void function(any) +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CurveLocation.js /^\ttoString: function() {$/;" f lineno:224 type:string function() +subtract /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tsubtract: function(size) {$/;" f lineno:224 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\t\t\t\t\tBase.each(Tool.prototype._events, function(key) {$/;" f lineno:226 type:void function(any) +findMaxError /Users/hari/Documents/Work/repo/lib/paper.js/src/path/PathFitter.js /^\tfindMaxError: function(first, last, curve, u) {$/;" f lineno:229 type:Object function(any, any, any, any) +getImage /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetImage: function() {$/;" f lineno:229 type:void function() +ellipse /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\tellipse: function(node) {$/;" f lineno:229 type:any function(any) +readNamed /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\treadNamed: function(list, name) {$/;" f lineno:232 type:any function(any, any) +set /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tset: function(props) {$/;" f lineno:232 type:Object function(any) +moveTo /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\t\tmoveTo: function(point) {$/;" f lineno:232 type:void function(any) +setImage /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tsetImage: function(image) {$/;" f lineno:233 type:void function(any) +getLeft /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tgetLeft: function() {$/;" f lineno:233 type:void function() +getLength /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetLength: function(\/* from, to *\/) {$/;" f lineno:234 type:void function() +_redraw /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t_redraw: function() {$/;" f lineno:235 type:void function() +rect /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\trect: function(node) {$/;" f lineno:237 type:any function(any) +setLeft /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tsetLeft: function(left) {$/;" f lineno:237 type:void function(any) +isLinear /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tisLinear: function() {$/;" f lineno:238 type:any function() +moveBy /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\t\tmoveBy: function(point) {$/;" f lineno:238 type:void function(any) +getHilite /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tgetHilite: function() {$/;" f lineno:239 type:void function() +shear /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tshear: function(point, center) {$/;" f lineno:240 type:Object function(any, any) +exportImage /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/CanvasView.js /^\t\texportImage: function(uri, callback) {$/;" f lineno:241 type:any function(any, any) +setLinear /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tsetLinear: function() {$/;" f lineno:242 type:void function() +closePath /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\t\tclosePath: function() {$/;" f lineno:243 type:void function() +getId /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetId: function() {$/;" f lineno:243 type:void function() +getNamed /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\tgetNamed: function(list, name) {$/;" f lineno:243 type:any function(any, any) +setHilite /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tsetHilite: function(hilite) {$/;" f lineno:243 type:void function(any) +getPart /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetPart: function(from, to) {$/;" f lineno:246 type:any function(any, any) +_isSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\t_isSelected: function(point) {$/;" f lineno:247 type:boolean function(any) +line /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\tline: function(node) {$/;" f lineno:247 type:any function(any) +_transform /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t_transform: function(matrix) {$/;" f lineno:247 type:void function(any) +hitTest /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\thitTest: function(point, options) {$/;" f lineno:248 type:null function(any, any) +getTop /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tgetTop: function() {$/;" f lineno:249 type:void function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\t\t\t'arcTo', 'lineBy', 'curveBy', 'arcBy'], function(key) {$/;" f lineno:250 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/CompoundPath.js /^\t\tfields[key] = function() {$/;" f lineno:251 type:void function() +add /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tadd: function(point) {$/;" f lineno:252 type:any function(any) +text /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\ttext: function(node) {$/;" f lineno:252 type:any function(any) +setTop /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tsetTop: function(top) {$/;" f lineno:253 type:void function(any) +request /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\tfunction request(url, scope) {$/;" f lineno:254 type:any function(Global Object, any) +getType /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetType: function() {$/;" f lineno:254 type:void function() +toCanvasStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\ttoCanvasStyle: function(ctx) {$/;" f lineno:255 type:any function(any) +_setSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\t_setSelected: function(point, selected) {$/;" f lineno:255 type:void function(any, any) +isLinear /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tisLinear: function() {$/;" f lineno:256 type:any function() +hasNamed /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\thasNamed: function(list, name) {$/;" f lineno:257 type:boolean function(any, any) +multiply /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tmultiply: function(size) {$/;" f lineno:258 type:any function(any) +onreadystatechange /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\t\txhr.onreadystatechange = function() {$/;" f lineno:260 type:any function() +getElement /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tgetElement: function() {$/;" f lineno:261 type:void function() +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\ttoString: function() {$/;" f lineno:261 type:string function() +getIntersections /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetIntersections: function(curve) {$/;" f lineno:261 type:any function(any) +importJson /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\timportJson: function(json) {$/;" f lineno:265 type:any function(any) +getRight /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tgetRight: function() {$/;" f lineno:265 type:number function() +serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\tserialize: function(obj, options, compact, dictionary) {$/;" f lineno:265 type: function(any, any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t\t\t\t\tfunction(name, i) {$/;" f lineno:266 type:void function(any, any) +getCrossings /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetCrossings: function(point, roots) {$/;" f lineno:266 type:number function(any, any) +isClosed /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tisClosed: function() {$/;" f lineno:266 type:void function() +getSource /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetSource: function() {$/;" f lineno:267 type:any function() +load /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\tfunction load() {$/;" f lineno:268 type:void function() +setRight /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tsetRight: function(right) {$/;" f lineno:269 type:void function(any) +setClosed /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tsetClosed: function(closed) {$/;" f lineno:270 type:void function(any) +setSource /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tsetSource: function(src) {$/;" f lineno:271 type:void function(any) +getViewSize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tgetViewSize: function() {$/;" f lineno:272 type:void function() +Circle /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.Constructors.js /^\t\tCircle: function(\/* center, radius *\/) {$/;" f lineno:273 type:any function() +applyTransform /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction applyTransform(item, value, name, node) {$/;" f lineno:274 type:void function(any, any, any, any) +equals /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tequals: function(mx) {$/;" f lineno:275 type:boolean function(any) +setViewSize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tsetViewSize: function(size) {$/;" f lineno:276 type:void function(any) +loaded /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\t\tfunction loaded() {$/;" f lineno:276 type:void function() +add /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\t\t\t\tadd: function(item, create) {$/;" f lineno:278 type:Array[string] function(any, any) +getBottom /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tgetBottom: function() {$/;" f lineno:280 type:number function() +_serialize /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t_serialize: function(options) {$/;" f lineno:280 type:Array function(any) +equals /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\tequals: function(color) {$/;" f lineno:280 type:boolean function(any) +_updateEvent /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^\t_updateEvent: function(type, point, minDistance, maxDistance, start,$/;" f lineno:281 type:boolean function(any, any, any, any, any, any, any) +getName /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetName: function() {$/;" f lineno:281 type:void function() +load /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\t\t\tload: function() {$/;" f lineno:283 type:void function() +isIdentity /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tisIdentity: function() {$/;" f lineno:283 type:boolean function() +setBottom /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tsetBottom: function(bottom) {$/;" f lineno:284 type:void function(any) +setName /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsetName: function(name, unique) {$/;" f lineno:285 type:void function(any, any) +applyOpacity /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction applyOpacity(item, value, name) {$/;" f lineno:286 type:void function(any, any, any) +subtract /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tsubtract: function(point) {$/;" f lineno:288 type:any function(any) +isEmpty /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tisEmpty: function() {$/;" f lineno:290 type:boolean function() +divide /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tdivide: function(size) {$/;" f lineno:292 type:any function(any) +transform /Users/hari/Documents/Work/repo/lib/paper.js/src/color/GradientColor.js /^\ttransform: function(matrix) {$/;" f lineno:292 type:void function(any) +draw /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\tdraw: function(ctx, matrix) {$/;" f lineno:293 type:void function(any, any) +isPolygon /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tisPolygon: function() {$/;" f lineno:294 type:boolean function() +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\tclone: function() {$/;" f lineno:294 type:any function() +isInvertible /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tisInvertible: function() {$/;" f lineno:294 type:boolean function() +getCenterX /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tgetCenterX: function() {$/;" f lineno:295 type:number function() +applyTextAttribute /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction applyTextAttribute(item, apply) {$/;" f lineno:295 type:void function(any, void function(any)) +setCenterX /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tsetCenterX: function(x) {$/;" f lineno:299 type:void function(any) +getBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tgetBounds: function() {$/;" f lineno:300 type:any function() +reverse /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\treverse: function() {$/;" f lineno:301 type:any function() +getGlobalMatrix /Users/hari/Documents/Work/repo/lib/paper.js/src/project/Project.js /^\t\tfunction getGlobalMatrix(item, mx, cached) {$/;" f lineno:303 type:any function(any, any, ) +Arc /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.Constructors.js /^\t\tArc: function(\/* from, through, to *\/) {$/;" f lineno:304 type:any function() +convert /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\tconvert: function(type) {$/;" f lineno:304 type:any function(any) +isSingular /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tisSingular: function() {$/;" f lineno:304 type:boolean function() +_applyMatrix /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t_applyMatrix: function(matrix) {$/;" f lineno:305 type:boolean function(any) +getElement /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetElement: function() {$/;" f lineno:306 type:void function() +exportCompoundPath /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction exportCompoundPath(item) {$/;" f lineno:307 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tvar attributes = Base.each(SvgStyles, function(entry) {$/;" f lineno:308 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\tthis[entry.attribute] = function(item, value, name, node) {$/;" f lineno:309 type:void function(any, any, any, any) +getCenterY /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tgetCenterY: function() {$/;" f lineno:310 type:number function() +id /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\tid: function(item, value) {$/;" f lineno:313 type:void function(any, any) +getSize /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tgetSize: function() {$/;" f lineno:313 type:any function() +concatenate /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tconcatenate: function(mx) {$/;" f lineno:314 type:Object function(any) +handleAttribute /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\tfunction handleAttribute(name) {$/;" f lineno:314 type:any function(Global Object, string) function(string) +setCenterY /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tsetCenterY: function(y) {$/;" f lineno:314 type:void function(any) +exportPlacedSymbol /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction exportPlacedSymbol(item) {$/;" f lineno:315 type:any function(any) +divide /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tdivide: function(parameter) {$/;" f lineno:315 type: function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/PaperScript.js /^\t\treturn function(el, attr) {$/;" f lineno:316 type:any function(Global Object, string) +getSubImage /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetSubImage: function(rect) {$/;" f lineno:317 type:any function(any) +clip-path /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\t'clip-path': function(item, value) {$/;" f lineno:319 type:any function(any, any) +isSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tisSelected: function() {$/;" f lineno:319 type:any function() +extend /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t\textend: function(src) {$/;" f lineno:321 type:any function(any) +setSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tsetSelected: function(selected) {$/;" f lineno:323 type:void function(any) +getCenter /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tgetCenter: function() {$/;" f lineno:323 type:any function() +multiply /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tmultiply: function(point) {$/;" f lineno:324 type:any function(any) +modulo /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tmodulo: function(size) {$/;" f lineno:325 type:any function(any) +fire /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^\tfire: function(type, event) {$/;" f lineno:325 type:any function(any, any) +getCenter /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tgetCenter: function(\/* dontLink *\/) {$/;" f lineno:326 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t\t\t\tBase.each(comps, function(name) {$/;" f lineno:326 type:void function(any) +setCenter /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tsetCenter: function(center) {$/;" f lineno:327 type:void function(any) +_add /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t_add: function(segs, index) {$/;" f lineno:329 type:any function(any, any) +negate /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tnegate: function() {$/;" f lineno:330 type:any function() +toDataURL /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\ttoDataURL: function() {$/;" f lineno:330 type: function() +deserialize /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\tdeserialize: function(obj, data) {$/;" f lineno:330 type: function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t\t\t\t\tthis['get' + part] = function() {$/;" f lineno:330 type:any function() +setCenter /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tsetCenter: function(point) {$/;" f lineno:331 type:Object function(any) +opacity /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\topacity: function(item, value) {$/;" f lineno:332 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t\t\t\t\tthis['set' + part] = function(value) {$/;" f lineno:333 type:void function(any) +preConcatenate /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tpreConcatenate: function(mx) {$/;" f lineno:334 type:Object function(any) +getIndex /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tgetIndex: function() {$/;" f lineno:336 type: function() +exportGradient /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction exportGradient(color, item) {$/;" f lineno:336 type:string function(any, any) +getZoom /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tgetZoom: function() {$/;" f lineno:337 type:void function() +RegularPolygon /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.Constructors.js /^\t\tRegularPolygon: function(\/* center, sides, radius *\/) {$/;" f lineno:337 type:any function() +font-family /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\t'font-family': function(item, value) {$/;" f lineno:340 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\t\tapplyTextAttribute(item, function(item) {$/;" f lineno:341 type:void function(any) +setZoom /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tsetZoom: function(zoom) {$/;" f lineno:341 type:void function(any) +font-size /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\t'font-size': function(item, value) {$/;" f lineno:346 type:void function(any, any) +getPath /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tgetPath: function() {$/;" f lineno:346 type:null function() +random /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t\trandom: function() {$/;" f lineno:346 type:any function() +equals /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tequals: function(size) {$/;" f lineno:347 type:boolean function(any) +drawImage /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tdrawImage: function(image, point) {$/;" f lineno:347 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\t\tapplyTextAttribute(item, function(item) {$/;" f lineno:347 type:void function(any) +_onHandleEvent /Users/hari/Documents/Work/repo/lib/paper.js/src/tool/Tool.js /^\t_onHandleEvent: function(type, point, event) {$/;" f lineno:352 type:boolean function(any, any, any) +text-anchor /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\t'text-anchor': function(item, value) {$/;" f lineno:352 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\t\tapplyTextAttribute(item, function(item) {$/;" f lineno:353 type:void function(any) +isVisible /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tisVisible: function() {$/;" f lineno:354 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\tBase.each(components, function(comps, type) {$/;" f lineno:356 type:void function(any, any) +getCurve /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tgetCurve: function() {$/;" f lineno:356 type:null function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\tBase.each(comps, function(component) {$/;" f lineno:357 type:void function(any) +isZero /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tisZero: function() {$/;" f lineno:358 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t\tfields['get' + part] = function() {$/;" f lineno:359 type:any function() +divide /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tdivide: function(point) {$/;" f lineno:360 type:any function(any) +getAverageColor /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetAverageColor: function(object) {$/;" f lineno:361 type:null function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t\t\tfields['set' + part] = function(value) {$/;" f lineno:362 type:void function(any) +visibility /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\tvisibility: function(item, value) {$/;" f lineno:363 type:void function(any, any) +scrollBy /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tscrollBy: function(point) {$/;" f lineno:363 type:void function(any) +isNaN /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tisNaN: function() {$/;" f lineno:367 type:any function() +stop-color /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\t'stop-color': function(item, value) {$/;" f lineno:367 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tfunction(name) {$/;" f lineno:368 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\tthis['get' + part] = function() {$/;" f lineno:371 type:any function() +exportJson /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\texportJson: function(obj, options) {$/;" f lineno:372 type:any function(any, any) +stop-opacity /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\t'stop-opacity': function(item, value) {$/;" f lineno:372 type:void function(any, any) +create /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\t\tcreate: function(width, height) {$/;" f lineno:373 type:any function(any, any) +split /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tsplit: function(parameter) {$/;" f lineno:374 type:null function(any) +transform /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\ttransform: function(\/* point | *\/ src, srcOff, dst, dstOff, numPts) {$/;" f lineno:374 type:any function(any, any, any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\tthis['set' + part] = function(value) {$/;" f lineno:374 type:void function(any) +importJson /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\timportJson: function(json) {$/;" f lineno:376 type:any function(any) +getNext /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tgetNext: function() {$/;" f lineno:377 type:null function() +offset /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\toffset: function(item, value) {$/;" f lineno:379 type:void function(any, any) +_changed /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\t_changed: function() {$/;" f lineno:380 type:void function() +splice /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\tsplice: function(list, items, index, remove) {$/;" f lineno:385 type:Array function(any, any, any, any) +projectToView /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tprojectToView: function(point) {$/;" f lineno:385 type:any function(any) +_transformPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t_transformPoint: function(point, dest, dontNotify) {$/;" f lineno:385 type:any function(any, any, any) +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tclone: function() {$/;" f lineno:385 type:any function() +viewBox /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\tviewBox: function(item, value, name, node, styles) {$/;" f lineno:385 type:void function(any, any, any, any, any) +Star /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.Constructors.js /^\t\tStar: function(\/* center, points, radius1, radius2 *\/) {$/;" f lineno:386 type:any function() +viewToProject /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tviewToProject: function(point) {$/;" f lineno:389 type:any function(any) +getPrevious /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tgetPrevious: function() {$/;" f lineno:391 type:null function() +min /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\t\tmin: function(size1, size2) {$/;" f lineno:392 type:any function(any, any) +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\ttoString: function() {$/;" f lineno:392 type:string function() +_getInverse /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t_getInverse: function() {$/;" f lineno:393 type:any function() +modulo /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tmodulo: function(point) {$/;" f lineno:393 type:any function(any) +_adjustCurves /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t_adjustCurves: function(from, to) {$/;" f lineno:394 type:void function(any, any) +getType /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\tgetType: function() {$/;" f lineno:396 type:void function() +_transformCoordinates /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t_transformCoordinates: function(src, srcOff, dst, dstOff, numPts) {$/;" f lineno:397 type:any function(any, any, any, any, any) +negate /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tnegate: function() {$/;" f lineno:398 type:any function() +getComponents /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\tgetComponents: function() {$/;" f lineno:400 type:Array function() +reverse /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\treverse: function() {$/;" f lineno:401 type:any function() +applyStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction applyStyle(item, node) {$/;" f lineno:401 type:any function(any, any) +equals /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tequals: function(rect) {$/;" f lineno:403 type:boolean function(any) +create /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tcreate: function(path, segment1, segment2) {$/;" f lineno:404 type:any function(any, any, any) +remove /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tremove: function() {$/;" f lineno:408 type:boolean function() +_transformCorners /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t_transformCorners: function(rect) {$/;" f lineno:409 type:any function(any) +transform /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\ttransform: function(matrix) {$/;" f lineno:409 type:Object function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\t\tBase.each(SvgStyles, function(entry) {$/;" f lineno:410 type:void function(any) +isEmpty /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tisEmpty: function() {$/;" f lineno:412 type:boolean function() +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tclone: function() {$/;" f lineno:412 type:any function() +getValues /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetValues: function(segment1, segment2) {$/;" f lineno:412 type:Array function(any, any) +max /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\t\tmax: function(size1, size2) {$/;" f lineno:413 type:any function(any, any) +equals /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\tequals: function(segment) {$/;" f lineno:416 type:boolean function(any) +merge /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\tmerge: function() {$/;" f lineno:418 type:any function() +_countCurves /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t_countCurves: function() {$/;" f lineno:418 type:number function() +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\ttoString: function() {$/;" f lineno:419 type:string function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\t\treturn Base.each(arguments, function(hash) {$/;" f lineno:419 type:void function(any) +getAttribute /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction getAttribute(node, name, styles) {$/;" f lineno:419 type: function(any, string, Object) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\t\t\tBase.each(hash, function(value, key) {$/;" f lineno:420 type:void function(any, any) +_transformBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t_transformBounds: function(bounds, dest, dontNotify) {$/;" f lineno:423 type:any function(any, any, any) +getDistance /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tgetDistance: function(point, squared) {$/;" f lineno:423 type:number function(any, any) +evaluate /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tevaluate: function(v, offset, isParameter, type) {$/;" f lineno:425 type:any function(any, any, any, any) +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\ttoString: function() {$/;" f lineno:426 type:string function() +capitalize /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\tcapitalize: function(str) {$/;" f lineno:429 type:any function(any) +getAlpha /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\tgetAlpha: function() {$/;" f lineno:429 type: function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\t\treturn str.replace(\/\\b[a-z]\/g, function(match) {$/;" f lineno:430 type:any function(any) +random /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\t\trandom: function() {$/;" f lineno:431 type:any function() +setAlpha /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\tsetAlpha: function(alpha) {$/;" f lineno:433 type:void function(any) +_transformCoordinates /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Segment.js /^\t_transformCoordinates: function(matrix, coords, change) {$/;" f lineno:435 type:any function(any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^}, new function() { \/\/ Scope for injecting round, ceil, floor, abs:$/;" f lineno:435 type:any function() +camelize /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\tcamelize: function(str) {$/;" f lineno:438 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\t\treturn str.replace(\/-(.)\/g, function(all, chr) {$/;" f lineno:439 type:any function(any, any) +getLength /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tgetLength: function() {$/;" f lineno:440 type:number function() +getPixel /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetPixel: function(point) {$/;" f lineno:441 type:any function(any) +hasAlpha /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\thasAlpha: function() {$/;" f lineno:443 type:boolean function() +getDefinition /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction getDefinition(item) {$/;" f lineno:445 type:any function(any) +inverseTransform /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tinverseTransform: function(point) {$/;" f lineno:446 type:any function(any) +hyphenate /Users/hari/Documents/Work/repo/lib/paper.js/src/core/Base.js /^\t\thyphenate: function(str) {$/;" f lineno:447 type:any function(any) +applyAttributes /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction applyAttributes(item, node) {$/;" f lineno:448 type:any function(any, any) +setLength /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tsetLength: function(length) {$/;" f lineno:448 type:Object function(any) +setDefinition /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction setDefinition(item, node) {$/;" f lineno:451 type:void function(any, any) +equals /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\tequals: function(color) {$/;" f lineno:454 type:boolean function(any) +_getDeterminant /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t_getDeterminant: function() {$/;" f lineno:454 type: function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\tBase.each(attributes, function(apply, name) {$/;" f lineno:455 type:void function(any, any) +exportDefinitions /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction exportDefinitions(node) {$/;" f lineno:458 type:boolean function(boolean) +_inverseTransform /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t_inverseTransform: function(point, dest, dontNotify) {$/;" f lineno:461 type:null function(any, any, any) +getDefinition /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction getDefinition(value) {$/;" f lineno:464 type:any function(any) +setPixel /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tsetPixel: function(point, color) {$/;" f lineno:467 type:void function(any, any) +toString /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\ttoString: function() {$/;" f lineno:470 type:string function() +importSvg /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\tfunction importSvg(node, clearDefs) {$/;" f lineno:471 type:any function(any, undefined) +subdivide /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tsubdivide: function(v, t) {$/;" f lineno:473 type:Array[Array[number]] function(any, any) +exportSvg /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\tfunction exportSvg(item) {$/;" f lineno:478 type:any function(any) +normalize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tnormalize: function(length) {$/;" f lineno:481 type:any function(any) +decompose /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tdecompose: function() {$/;" f lineno:485 type: function() +toCss /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\ttoCss: function(noAlpha) {$/;" f lineno:486 type: function(any) +createImageData /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tcreateImageData: function(size) {$/;" f lineno:486 type:any function(any) +importSvg /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\timportSvg: function(node) {$/;" f lineno:492 type:any function(any) +add /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tadd: function(segment1 \/*, segment2, ... *\/) {$/;" f lineno:492 type:any function(any) +exportSvg /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\t\texportSvg: function() {$/;" f lineno:493 type:boolean function() +getImageData /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tgetImageData: function(rect) {$/;" f lineno:497 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\treturn Base.each(['round', 'ceil', 'floor', 'abs'], function(name) {$/;" f lineno:497 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\t\tthis[name] = function() {$/;" f lineno:499 type:any function() +solveCubic /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tsolveCubic: function (v, coord, val, roots) {$/;" f lineno:500 type:any function(any, any, any, any) +contains /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tcontains: function(arg) {$/;" f lineno:504 type:any function(any) +importSvg /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgImport.js /^\t\timportSvg: function(node) {$/;" f lineno:505 type:any function(any) +exportSvg /Users/hari/Documents/Work/repo/lib/paper.js/src/svg/SvgExport.js /^\t\texportSvg: function() {$/;" f lineno:508 type:boolean function() +toCanvasStyle /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^\ttoCanvasStyle: function() {$/;" f lineno:508 type:any function() +setImageData /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tsetImageData: function(data, point) {$/;" f lineno:511 type:void function(any, any) +getParameterOf /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetParameterOf: function(v, x, y) {$/;" f lineno:512 type: function(any, any, any) +getAngle /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tgetAngle: function(\/* point *\/) {$/;" f lineno:512 type:number function() +_containsPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t_containsPoint: function(point) {$/;" f lineno:514 type:boolean function(any) +LinkedSize /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^var LinkedSize = Size.extend({$/;" v lineno:515 type:any +_getBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\t_getBounds: function(getter, matrix) {$/;" f lineno:516 type:any function(any, any) +set /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tset: function(width, height, dontNotify) {$/;" f lineno:516 type:Object function(any, any, any) +setAngle /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tsetAngle: function(angle) {$/;" f lineno:517 type:Object function(any) +_hitTest /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\t_hitTest: function(point, options) {$/;" f lineno:521 type:any function(any, any) +_containsRectangle /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t_containsRectangle: function(rect) {$/;" f lineno:522 type:boolean function(any) +getWidth /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tgetWidth: function() {$/;" f lineno:524 type:void function() +isSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisSelected: function() {$/;" f lineno:527 type: function() +setWidth /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tsetWidth: function(width) {$/;" f lineno:528 type:void function(any) +get /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\t\t\t\t\tget: function() {$/;" f lineno:528 type:any function() +getHeight /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tgetHeight: function() {$/;" f lineno:533 type:void function() +draw /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Raster.js /^\tdraw: function(ctx, param) {$/;" f lineno:536 type:void function(any, any) +insert /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tinsert: function(index, segment1 \/*, segment2, ... *\/) {$/;" f lineno:536 type:any function(any, any) +setSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsetSelected: function(selected \/*, noChildren *\/) {$/;" f lineno:536 type:void function(any) +setHeight /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\tsetHeight: function(height) {$/;" f lineno:537 type:void function(any) +create /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Size.js /^\t\tcreate: function(owner, setter, width, height, dontLink) {$/;" f lineno:543 type:any function(any, any, any, any, any) +addSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\taddSegment: function(segment) {$/;" f lineno:544 type:any function(any) +insertSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tinsertSegment: function(index, segment) {$/;" f lineno:548 type:any function(any, any) +getAngleInRadians /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tgetAngleInRadians: function(\/* point *\/) {$/;" f lineno:550 type:number function() +isFullySelected /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisFullySelected: function() {$/;" f lineno:552 type: function() +getPart /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetPart: function(v, from, to) {$/;" f lineno:553 type:any function(any, any, any) +create /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\t\tcreate: function(element) {$/;" f lineno:558 type:any function(any) +isFlatEnough /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tisFlatEnough: function(v, tolerance) {$/;" f lineno:563 type:boolean function(any, any) +setFullySelected /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsetFullySelected: function(selected) {$/;" f lineno:563 type:void function(any) +getAngleInDegrees /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tgetAngleInDegrees: function(\/* point *\/) {$/;" f lineno:567 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^}, new function() {$/;" f lineno:568 type:Object function() +intersects /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tintersects: function(rect) {$/;" f lineno:574 type:boolean function(any) +getValues /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tgetValues: function() {$/;" f lineno:574 type:Array[undefined] function() +getView /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tfunction getView(event) {$/;" f lineno:576 type:any function(any) +getBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetBounds: function(v) {$/;" f lineno:578 type:any function(any) +isClipMask /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisClipMask: function() {$/;" f lineno:581 type:void function() +viewToProject /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tfunction viewToProject(view, event) {$/;" f lineno:583 type:any function(any, any) +getTranslation /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tgetTranslation: function() {$/;" f lineno:584 type:any function() +setClipMask /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsetClipMask: function(clipMask) {$/;" f lineno:585 type:void function(any) +updateFocus /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tfunction updateFocus() {$/;" f lineno:587 type:void function() +addSegments /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\taddSegments: function(segments) {$/;" f lineno:594 type:any function(any) +_addBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t_addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {$/;" f lineno:594 type:void function(any, any, any, any, any, any, any, any, any) +getScaling /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tgetScaling: function() {$/;" f lineno:596 type:void function() +add /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t\tfunction add(value, padding) {$/;" f lineno:597 type:void function(number, number) +getQuadrant /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tgetQuadrant: function() {$/;" f lineno:598 type:number function() +mousedown /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tfunction mousedown(event) {$/;" f lineno:600 type:void function(any) +getRotation /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tgetRotation: function() {$/;" f lineno:607 type:void function() +insertSegments /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tinsertSegments: function(index, segments) {$/;" f lineno:608 type:any function(any, any) +getDirectedAngle /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tgetDirectedAngle: function(point) {$/;" f lineno:612 type:number function(any) +mousemove /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tfunction mousemove(event) {$/;" f lineno:617 type:void function(any) +inverted /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tinverted: function() {$/;" f lineno:619 type:any function() +intersect /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tintersect: function(rect) {$/;" f lineno:623 type:any function(any) +rotate /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\trotate: function(angle, center) {$/;" f lineno:628 type:Object function(any, any) +shiftless /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tshiftless: function() {$/;" f lineno:630 type:any function() +removeSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tremoveSegment: function(index) {$/;" f lineno:636 type:null function(any) +_addIntersections /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t_addIntersections: function(v1, v2, curve, locations) {$/;" f lineno:638 type:any function(any, any, any, any) +unite /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tunite: function(rect) {$/;" f lineno:640 type:any function(any) +applyToContext /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\tapplyToContext: function(ctx, reset) {$/;" f lineno:640 type:Object function(any, any) +GrayColor /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^var GrayColor = this.GrayColor = Color.extend(\/** @lends GrayColor# *\/{$/;" v lineno:641 type:any +getData /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetData: function() {$/;" f lineno:641 type:Object function() +setData /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsetData: function(data) {$/;" f lineno:647 type:void function(any) +mouseup /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tfunction mouseup(event) {$/;" f lineno:648 type:void function(any) +create /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t\tcreate: function(a, c, b, d, tx, ty) {$/;" f lineno:648 type:any function(any, any, any, any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^}, new function() {$/;" f lineno:652 type:any function() +equals /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tequals: function(point) {$/;" f lineno:655 type:boolean function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t}, function(prop, name) {$/;" f lineno:660 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t\tthis['get' + name] = function() {$/;" f lineno:662 type:any function() +selectstart /Users/hari/Documents/Work/repo/lib/paper.js/src/ui/View.js /^\tfunction selectstart(event) {$/;" f lineno:663 type:void function(any) +include /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tinclude: function(point) {$/;" f lineno:663 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Matrix.js /^\t\tthis['set' + name] = function(value) {$/;" f lineno:665 type:void function(any) +isInside /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tisInside: function(rect) {$/;" f lineno:668 type:any function(any) +removeSegments /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tremoveSegments: function(from, to\/*, includeCurves *\/) {$/;" f lineno:672 type:any function(any, any) +isClose /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tisClose: function(point, tolerance) {$/;" f lineno:679 type:boolean function(any, any) +RgbColor /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^var RgbColor = this.RgbColor = this.RGBColor = Color.extend(\/** @lends RgbColor# *\/{$/;" v lineno:680 type:any +getPosition /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetPosition: function(\/* dontLink *\/) {$/;" f lineno:689 type:any function() +isColinear /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tisColinear: function(point) {$/;" f lineno:690 type:boolean function(any) +expand /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\texpand: function(hor, ver) {$/;" f lineno:690 type:any function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tfunction(name) {$/;" f lineno:698 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t\tthis[name] = function() {$/;" f lineno:699 type:any function() +isOrthogonal /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tisOrthogonal: function(point) {$/;" f lineno:701 type:boolean function(any) +setPosition /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsetPosition: function(point) {$/;" f lineno:702 type:void function(any) +isZero /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tisZero: function() {$/;" f lineno:710 type:any function() +scale /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tscale: function(hor, ver) {$/;" f lineno:714 type:any function(any, any) +getMatrix /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetMatrix: function() {$/;" f lineno:716 type:void function() +setMatrix /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsetMatrix: function(matrix) {$/;" f lineno:720 type:void function(any) +isNaN /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tisNaN: function() {$/;" f lineno:720 type:any function() +create /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\tcreate: function(x, y, width, height) {$/;" f lineno:721 type:any function(any, any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^}, new function() {$/;" f lineno:725 type:any function() +dot /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tdot: function(point) {$/;" f lineno:731 type:number function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\tfunction(parts, index) {$/;" f lineno:732 type:void function(any, any) +isEmpty /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisEmpty: function() {$/;" f lineno:734 type:boolean function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tfunction(name) {$/;" f lineno:738 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\tthis[name] = function(\/* matrix *\/) {$/;" f lineno:742 type:any function() +cross /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tcross: function(point) {$/;" f lineno:742 type:number function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\t\tthis[get] = function(\/* dontLink *\/) {$/;" f lineno:748 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\t\tthis[set] = function(point) {$/;" f lineno:752 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tfunction(name, index) {$/;" f lineno:752 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t\tthis[name + 'At'] = function(offset, isParameter) {$/;" f lineno:753 type:any function(any, any) +project /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tproject: function(point) {$/;" f lineno:754 type:any function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t\tthis[name] = function(parameter) {$/;" f lineno:758 type:any function(any) +_getCachedBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_getCachedBounds: function(getter, matrix, cacheItem) {$/;" f lineno:765 type:any function(any, any, any) +HsbColor /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^var HsbColor = this.HsbColor = this.HSBColor = Color.extend(\/** @lends HsbColor# *\/{$/;" v lineno:769 type:any +LinkedRectangle /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^var LinkedRectangle = Rectangle.extend({$/;" v lineno:771 type:any +set /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\tset: function(x, y, width, height, dontNotify) {$/;" f lineno:772 type:Object function(any, any, any, any, any) +getParameterAt /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetParameterAt: function(offset, start) {$/;" f lineno:773 type:any function(any, any) +getParameterOf /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetParameterOf: function(point) {$/;" f lineno:784 type:any function(any) +create /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\t\tcreate: function(x, y) {$/;" f lineno:785 type:any function(any, any) +isFullySelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tisFullySelected: function() {$/;" f lineno:789 type:void function() +create /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\tcreate: function(owner, setter, x, y, width, height) {$/;" f lineno:790 type:any function(any, any, any, any, any, any) +setFullySelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tsetFullySelected: function(selected) {$/;" f lineno:794 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^}, new function() {$/;" f lineno:797 type:any function() +getLocationAt /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetLocationAt: function(offset, isParameter) {$/;" f lineno:798 type:any function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\treturn Base.each(['x', 'y', 'width', 'height'], function(key) {$/;" f lineno:800 type:void function(any) +setSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tsetSelected: function(selected) {$/;" f lineno:802 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\tthis['get' + part] = function() {$/;" f lineno:803 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\tthis['set' + part] = function(value) {$/;" f lineno:807 type:void function(any) +min /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\t\tmin: function(point1, point2) {$/;" f lineno:810 type:any function(any, any) +_selectSegments /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t_selectSegments: function(selected) {$/;" f lineno:810 type:void function(any) +getLocationOf /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tgetLocationOf: function(point) {$/;" f lineno:810 type:null function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\tfunction(key) {$/;" f lineno:818 type:void function(any) +_updateSelection /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t_updateSelection: function(segment, oldState, newState) {$/;" f lineno:819 type:void function(any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\t\tthis[name] = function(value) {$/;" f lineno:820 type:void function(any) +_clearBoundsCache /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_clearBoundsCache: function() {$/;" f lineno:823 type:void function() +max /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\t\tmax: function(point1, point2) {$/;" f lineno:834 type:any function(any, any) +isSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\t\tisSelected: function() {$/;" f lineno:840 type:any function() +setSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Rectangle.js /^\t\t\tsetSelected: function(selected) {$/;" f lineno:844 type:void function(any) +_getBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_getBounds: function(getter, matrix, cacheItem) {$/;" f lineno:845 type:any function(any, any, any) +HslColor /Users/hari/Documents/Work/repo/lib/paper.js/src/color/Color.js /^var HslColor = this.HslColor = this.HSLColor = Color.extend(\/** @lends HslColor# *\/{$/;" v lineno:848 type:any +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^new function() { \/\/ Scope for methods that require numerical integration$/;" f lineno:851 type:Object function() +getLengthIntegrand /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tfunction getLengthIntegrand(v) {$/;" f lineno:853 type:number function(any) function(any) +flatten /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tflatten: function(maxDistance) {$/;" f lineno:856 type:void function(any) +random /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\t\trandom: function() {$/;" f lineno:857 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^}, new function() { \/\/ Scope for injecting round, ceil, floor, abs:$/;" f lineno:861 type:any function() +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t\treturn function(t) {$/;" f lineno:868 type:number function(any) +setBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsetBounds: function(rect) {$/;" f lineno:871 type:void function(any) +getIterations /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tfunction getIterations(a, b) {$/;" f lineno:877 type:number function(number, number) +getLength /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t\tgetLength: function(v, a, b) {$/;" f lineno:887 type:number function(any, any, any) +getParameterAt /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t\tgetParameterAt: function(v, offset, start) {$/;" f lineno:903 type:number function(any, any, any) +simplify /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tsimplify: function(tolerance) {$/;" f lineno:914 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\treturn Base.each(['round', 'ceil', 'floor', 'abs'], function(name) {$/;" f lineno:922 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\t\tthis[name] = function() {$/;" f lineno:924 type:any function() +f /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t\t\tfunction f(t) {$/;" f lineno:928 type:number function(any) +getProject /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetProject: function() {$/;" f lineno:933 type:void function() +_setProject /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_setProject: function(project) {$/;" f lineno:937 type:void function(any) +LinkedPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^var LinkedPoint = Point.extend({$/;" v lineno:940 type:any +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^}, new function() { \/\/ Scope for nearest point on curve problem$/;" f lineno:941 type:Object function() +set /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tset: function(x, y, dontNotify) {$/;" f lineno:941 type:Object function(any, any, any) +getX /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tgetX: function() {$/;" f lineno:949 type:void function() +setX /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tsetX: function(x) {$/;" f lineno:953 type:void function(any) +getLayer /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetLayer: function() {$/;" f lineno:954 type: function() +getY /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tgetY: function() {$/;" f lineno:958 type:void function() +setY /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\tsetY: function(y) {$/;" f lineno:962 type:void function(any) +toBezierForm /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tfunction toBezierForm(v, point) {$/;" f lineno:963 type:Array function(any, any) +create /Users/hari/Documents/Work/repo/lib/paper.js/src/basic/Point.js /^\t\tcreate: function(owner, setter, x, y, dontLink) {$/;" f lineno:968 type:any function(any, any, any, any, any) +findRoots /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tfunction findRoots(w, depth) {$/;" f lineno:1009 type:Array[number] function(Array, number) +getParent /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetParent: function() {$/;" f lineno:1009 type:void function() +setParent /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsetParent: function(item) {$/;" f lineno:1013 type:any function(any) +split /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tsplit: function(index, parameter) {$/;" f lineno:1032 type: function(any, any) +countCrossings /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tfunction countCrossings(v) {$/;" f lineno:1056 type:number function(Array) +isFlatEnough /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\tfunction isFlatEnough(v) {$/;" f lineno:1072 type:boolean function(Array) +getChildren /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetChildren: function() {$/;" f lineno:1073 type:void function() +setChildren /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsetChildren: function(items) {$/;" f lineno:1077 type:void function(any) +getFirstChild /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetFirstChild: function() {$/;" f lineno:1089 type:null function() +isClockwise /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tisClockwise: function() {$/;" f lineno:1092 type: function() +edge /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction edge(x, y) {$/;" f lineno:1097 type:void function(any, any) +getLastChild /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetLastChild: function() {$/;" f lineno:1100 type:null function() +getNearestLocation /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t\tgetNearestLocation: function(point) {$/;" f lineno:1101 type:any function(any) +getNextSibling /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetNextSibling: function() {$/;" f lineno:1111 type:null function() +getPreviousSibling /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetPreviousSibling: function() {$/;" f lineno:1121 type:null function() +setClockwise /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tsetClockwise: function(clockwise) {$/;" f lineno:1124 type:void function(any) +getNearestPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Curve.js /^\t\tgetNearestPoint: function(point) {$/;" f lineno:1125 type:any function(any) +getIndex /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tgetIndex: function() {$/;" f lineno:1131 type:void function() +reverse /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\treverse: function() {$/;" f lineno:1139 type:void function() +isInserted /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisInserted: function() {$/;" f lineno:1141 type:boolean function() +clone /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tclone: function() {$/;" f lineno:1167 type:any function() +_clone /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_clone: function(copy) {$/;" f lineno:1171 type:any function(any) +copyTo /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tcopyTo: function(itemOrProject) {$/;" f lineno:1212 type:any function(any) +join /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tjoin: function(path) {$/;" f lineno:1220 type:boolean function(any) +rasterize /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\trasterize: function(resolution) {$/;" f lineno:1247 type:any function(any) +reduce /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\treduce: function() {$/;" f lineno:1263 type:Object function() +getLength /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetLength: function() {$/;" f lineno:1273 type:number function() +_getOffset /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t_getOffset: function(location) {$/;" f lineno:1283 type:null function(any) +hitTest /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\thitTest: function(point, options) {$/;" f lineno:1297 type:null function(any, any) +checkBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\tfunction checkBounds(type, part) {$/;" f lineno:1298 type:any function(string, string) +getLocationOf /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetLocationOf: function(point) {$/;" f lineno:1302 type:null function(any) +getLocationAt /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetLocationAt: function(offset, isParameter) {$/;" f lineno:1321 type:null function(any, any) +_hitTest /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_hitTest: function(point, options) {$/;" f lineno:1350 type:any function(any, any) +addChild /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\taddChild: function(item, _cloning) {$/;" f lineno:1368 type:any function(any, any) +insertChild /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tinsertChild: function(index, item, _cloning) {$/;" f lineno:1381 type:null function(any, any, any) +getPointAt /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetPointAt: function(offset, isParameter) {$/;" f lineno:1405 type:any function(any, any) +addChildren /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\taddChildren: function(items, _cloning) {$/;" f lineno:1406 type:any function(any, any) +insertChildren /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tinsertChildren: function(index, items, _cloning) {$/;" f lineno:1418 type:boolean function(any, any, any) +insertAbove /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tinsertAbove: function(item, _cloning) {$/;" f lineno:1445 type:any function(any, any) +insertBelow /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tinsertBelow: function(item, _cloning) {$/;" f lineno:1458 type:any function(any, any) +sendToBack /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tsendToBack: function() {$/;" f lineno:1468 type:any function() +bringToFront /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tbringToFront: function() {$/;" f lineno:1475 type:any function() +getTangentAt /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetTangentAt: function(offset, isParameter) {$/;" f lineno:1477 type:any function(any, any) +appendTop /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tappendTop: function(item) {$/;" f lineno:1487 type:any function(any) +appendBottom /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tappendBottom: function(item) {$/;" f lineno:1499 type:any function(any) +moveAbove /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tmoveAbove: function(item) {$/;" f lineno:1510 type:any function(any) +moveBelow /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tmoveBelow: function(item) {$/;" f lineno:1521 type:any function(any) +_removeFromNamed /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_removeFromNamed: function() {$/;" f lineno:1528 type:void function() +getNormalAt /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetNormalAt: function(offset, isParameter) {$/;" f lineno:1549 type:any function(any, any) +_remove /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_remove: function(notify) {$/;" f lineno:1554 type:boolean function(any) +getNearestLocation /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetNearestLocation: function(point) {$/;" f lineno:1562 type:null function(any) +remove /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tremove: function() {$/;" f lineno:1575 type:any function() +removeChildren /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tremoveChildren: function(from, to) {$/;" f lineno:1596 type:null function(any, any) +getNearestPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetNearestPoint: function(point) {$/;" f lineno:1608 type:any function(any) +hasFill /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\thasFill: function() {$/;" f lineno:1612 type:boolean function() +reverseChildren /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\treverseChildren: function() {$/;" f lineno:1615 type:void function() +contains /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tcontains: function(point) {$/;" f lineno:1619 type:boolean function(any) +isEditable /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisEditable: function() {$/;" f lineno:1635 type:boolean function() +_hitTest /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t_hitTest: function(point, options) {$/;" f lineno:1648 type:boolean function(any, any) +_getOrder /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_getOrder: function(item) {$/;" f lineno:1656 type:number function(any) +getList /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\tfunction getList(item) {$/;" f lineno:1659 type:Array[Object] function(Object) +checkPoint /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction checkPoint(seg, pt, name) {$/;" f lineno:1661 type:any function(any, any, string) +checkSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction checkSegment(seg, ends) {$/;" f lineno:1667 type:boolean function(any, ) +hasChildren /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\thasChildren: function() {$/;" f lineno:1685 type:void function() +isAbove /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisAbove: function(item) {$/;" f lineno:1696 type:boolean function(any) +isBelow /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisBelow: function(item) {$/;" f lineno:1707 type:boolean function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^}, new function() { \/\/ Scope for drawing$/;" f lineno:1712 type:Object function() +isParent /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisParent: function(item) {$/;" f lineno:1717 type:boolean function(any) +drawHandles /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tfunction drawHandles(ctx, segments, matrix, size) {$/;" f lineno:1723 type:void function(any, undefined, any, number) +drawHandle /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction drawHandle(index) {$/;" f lineno:1726 type:void function(number) +isChild /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisChild: function(item) {$/;" f lineno:1727 type:boolean function(any) +isDescendant /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisDescendant: function(item) {$/;" f lineno:1737 type:boolean function(any) +isAncestor /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisAncestor: function(item) {$/;" f lineno:1753 type:boolean function(any) +isGroupedWith /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tisGroupedWith: function(item) {$/;" f lineno:1763 type:boolean function(any) +drawSegments /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tfunction drawSegments(ctx, path, matrix) {$/;" f lineno:1769 type:void function(any, Object, undefined) +drawSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction drawSegment(i) {$/;" f lineno:1779 type:void function(number) +draw /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tdraw: function(ctx, param) {$/;" f lineno:1831 type:void function(any, any) +drawSelected /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tdrawSelected: function(ctx, matrix) {$/;" f lineno:1881 type:void function(any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^}, new function() { \/\/ Path Smoothing$/;" f lineno:1890 type:Object function() +getFirstControlPoints /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tfunction getFirstControlPoints(rhs) {$/;" f lineno:1899 type:Array[number] function(Array[number]) +smooth /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tsmooth: function() {$/;" f lineno:1920 type:void function() +scale /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tscale: function(hor, ver \/* | scale *\/, center) {$/;" f lineno:2016 type:any function(any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^}, new function() { \/\/ PostScript-style drawing commands$/;" f lineno:2020 type:Object function() +getCurrentSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tfunction getCurrentSegment(that) {$/;" f lineno:2025 type:any function(Object) +translate /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\ttranslate: function(delta) {$/;" f lineno:2031 type:any function(any) +moveTo /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tmoveTo: function(point) {$/;" f lineno:2036 type:void function(any) +moveBy /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tmoveBy: function(point) {$/;" f lineno:2048 type:void function(any) +lineTo /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tlineTo: function(point) {$/;" f lineno:2052 type:void function(any) +cubicCurveTo /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tcubicCurveTo: function(handle1, handle2, to) {$/;" f lineno:2057 type:void function(any, any, any) +quadraticCurveTo /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tquadraticCurveTo: function(handle, to) {$/;" f lineno:2069 type:void function(any, any) +rotate /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\trotate: function(angle, center) {$/;" f lineno:2080 type:any function(any, any) +curveTo /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tcurveTo: function(through, to, parameter) {$/;" f lineno:2085 type:void function(any, any, any) +arcTo /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tarcTo: function(to, clockwise \/* | through, to *\/) {$/;" f lineno:2101 type:any function(any, any) +shear /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tshear: function(hor, ver, center) {$/;" f lineno:2107 type:any function(any, any, any) +transform /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\ttransform: function(matrix \/*, applyMatrix *\/) {$/;" f lineno:2126 type:Object function(any) +_applyMatrix /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_applyMatrix: function(matrix) {$/;" f lineno:2172 type:boolean function(any) +lineBy /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tlineBy: function(vector) {$/;" f lineno:2182 type:void function(any) +curveBy /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tcurveBy: function(throughVector, toVector, parameter) {$/;" f lineno:2188 type:void function(any, any, any) +arcBy /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tarcBy: function(throughVector, toVector) {$/;" f lineno:2196 type:void function(any, any) +closePath /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tclosePath: function() {$/;" f lineno:2203 type:void function() +_getBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t_getBounds: function(getter, matrix) {$/;" f lineno:2215 type:any function(any, any) +getBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetBounds: function(segments, closed, style, matrix, strokePadding) {$/;" f lineno:2226 type:any function(any, any, any, any, any) +processSegment /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction processSegment(segment) {$/;" f lineno:2239 type:void function(any) +fitBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tfitBounds: function(rectangle, fill) {$/;" f lineno:2248 type:void function(any, any) +getStrokeBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetStrokeBounds: function(segments, closed, style, matrix) {$/;" f lineno:2265 type:any function(any, any, any, any) +importJson /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\timportJson: function(json) {$/;" f lineno:2268 type:any function(any) +getPenPadding /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction getPenPadding(radius, matrix) {$/;" f lineno:2271 type:Array[number] function(number, any) +add /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction add(point) {$/;" f lineno:2324 type:void function(any) +addBevelJoin /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction addBevelJoin(curve, t) {$/;" f lineno:2329 type:void function(any, number) +addJoin /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction addJoin(segment, join) {$/;" f lineno:2336 type:void function(any, string) +addCap /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\t\tfunction addCap(segment, cap, t) {$/;" f lineno:2369 type:void function(any, any, number) +getHandleBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetHandleBounds: function(segments, closed, style, matrix, strokePadding,$/;" f lineno:2403 type:any function(any, any, any, any, any, any) +getRoughBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/path/Path.js /^\tgetRoughBounds: function(segments, closed, style, matrix) {$/;" f lineno:2437 type:any function(any, any, any, any) +_setStyles /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t_setStyles: function(ctx) {$/;" f lineno:2719 type:void function(any) +drawSelectedBounds /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\tdrawSelectedBounds: function(bounds, ctx, matrix) {$/;" f lineno:2761 type:void function(any, any, any) +draw /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\t\tdraw: function(item, ctx, param) {$/;" f lineno:2778 type:void function(any, any, any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^}, Base.each(['down', 'drag', 'up', 'move'], function(name) {$/;" f lineno:2848 type:void function(any) +%anonymous_function /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tthis['removeOn' + Base.capitalize(name)] = function() {$/;" f lineno:2849 type:any function() +removeOn /Users/hari/Documents/Work/repo/lib/paper.js/src/item/Item.js /^\tremoveOn: function(obj) {$/;" f lineno:2984 type:Object function(any) From 27eeb24c4f2c7fdbb9861035bfc60728a1962a4d Mon Sep 17 00:00:00 2001 From: hkrish Date: Fri, 19 Apr 2013 14:46:27 +0200 Subject: [PATCH 04/48] Compound Paths working now. Also pulled in jLehni's changes on resolving transformations on compoundpaths --- Boolean.js | 96 ++++++++++++++++++++++++++++++++++++----------- booleanStudy.html | 12 ++++++ booleanTests.js | 24 +++++++++++- 3 files changed, 109 insertions(+), 23 deletions(-) diff --git a/Boolean.js b/Boolean.js index 84615ade..e262828c 100644 --- a/Boolean.js +++ b/Boolean.js @@ -81,8 +81,9 @@ * @param {Point} _handleOut * @param {Any} _id */ - function Node( _point, _handleIn, _handleOut, _id ){ + function Node( _point, _handleIn, _handleOut, _id, _childId ){ this.id = _id; + this.childId = _childId; this.type = NORMAL_NODE; this.point = _point; this.handleIn = _handleIn; // handleIn @@ -131,8 +132,9 @@ * @param {Node} _nodeOut * @param {Any} _id */ - function Link( _nodeIn, _nodeOut, _id ) { + function Link( _nodeIn, _nodeOut, _id, _childId ) { this.id = _id; + this.childId = _childId; this.nodeIn = _nodeIn; // nodeStart this.nodeOut = _nodeOut; // nodeEnd this.nodeIn.linkOut = this; // nodeStart.linkOut @@ -155,14 +157,14 @@ * @param {Integer} id * @return {Array} Links */ - function makeGraph( path, id ){ + function makeGraph( path, id, childId ){ var graph = []; var segs = path.segments, prevNode = null, firstNode = null, nuLink, nuNode; for( i = 0, l = segs.length; i < l; i++ ){ var nuSeg = segs[i].clone(); - nuNode = new Node( nuSeg.point, nuSeg.handleIn, nuSeg.handleOut, id ); + nuNode = new Node( nuSeg.point, nuSeg.handleIn, nuSeg.handleOut, id, childId ); if( prevNode ) { - nuLink = new Link( prevNode, nuNode, id ); + nuLink = new Link( prevNode, nuNode, id, childId ); graph.push( nuLink ); } prevNode = nuNode; @@ -171,7 +173,7 @@ } } // the path is closed - nuLink = new Link( prevNode, firstNode, id ); + nuLink = new Link( prevNode, firstNode, id, childId ); graph.push( nuLink ); return graph; } @@ -215,23 +217,46 @@ // The boolean operation may modify the original paths var path1 = _path1.clone(); var path2 = _path2.clone(); - if( !path1.clockwise ){ path1.reverse(); } - if( !path2.clockwise ){ path2.reverse(); } + // if( !path1.clockwise ){ path1.reverse(); } + // if( !path2.clockwise ){ path2.reverse(); } + // + var i, j, k, l, lnk, crv, node, nuNode, leftLink, rightLink; // Prepare the graphs. Graphs are list of Links that retains // full connectivity information. The order of links in a graph is not important // That allows us to sort and merge graphs and 'splice' links with their splits easily. // Also, this is the place to resolve self-intersecting paths - var graph = makeGraph( path1, 1 ); - var graph2 = makeGraph( path2, 2 ); - // Merge the two graphs. Since we have unique id's for each Link and Node, - // retrieveing the original graphs is rather simple. - graph = graph.concat( graph2 ); + var graph = [], path1Children, path2Children; + if( path1 instanceof CompoundPath ){ + path1Children = path1.children; + for (i = 0, l = path1Children.length; i < l; i++) { + path1Children[i].closed = true; + graph = graph.concat( makeGraph( path1Children[i], 1, i + 1 ) ); + } + } else { + path1.closed = true; + path1.clockwise = true; + graph = graph.concat( makeGraph( path1, 1, 1 ) ); + } + + // TODO: if operator === BooleanOps.subtract, then for path2, clockwise must be false + if( path2 instanceof CompoundPath ){ + path2Children = path2.children; + for (i = 0, l = path2Children.length; i < l; i++) { + path2Children[i].closed = true; + graph = graph.concat( makeGraph( path2Children[i], 2, i + 1 ) ); + } + } else { + path2.closed = true; + path2.clockwise = true; + graph = graph.concat( makeGraph( path2, 2, 1 ) ); + } + + window.g = graph // Sort function to sort intersections according to the 'parameter'(t) in a link (curve) function ixSort( a, b ){ return a._parameter - b._parameter; } - var i, j, k, l, lnk, crv, node, nuNode, leftLink, rightLink; /* * Pass 1: * Calculate the intersections for all graphs @@ -264,7 +289,6 @@ } } - /* * Pass 2: * Walk the graph, sort the intersections on each individual link. @@ -303,8 +327,8 @@ // Make new link and convert handles from absolute to relative // TODO: check if link is linear and set handles to null var ixPoint = new Point( left[6], left[7] ); - nuNode = new Node( ixPoint, new Point(left[4] - ixPoint.x, left[5] - ixPoint.y), - new Point(right[2] - ixPoint.x, right[3] - ixPoint.y), lnk.id ); + nuNode = new Node( ixPoint, new Point(left[4] - ixPoint.x, left[5] - ixPoint.y), + new Point(right[2] - ixPoint.x, right[3] - ixPoint.y), lnk.id, lnk.childId ); nuNode.type = INTERSECTION_NODE; nuNode._intersectionID = ix[j]._intersectionID; // clear the cached Segment on original end nodes and Update their handles @@ -315,8 +339,8 @@ tmppnt = lnk.nodeOut.point; lnk.nodeOut.handleIn = new Point( right[4] - tmppnt.x, right[5] - tmppnt.y ); // Make new links after the split - leftLink = new Link( lnk.nodeIn, nuNode, lnk.id ); - rightLink = new Link( nuNode, lnk.nodeOut, lnk.id ); + leftLink = new Link( lnk.nodeIn, nuNode, lnk.id, lnk.childId); + rightLink = new Link( nuNode, lnk.nodeOut, lnk.id, lnk.childId ); } // Add the first split link back to the graph, since we sorted the intersections // already, this link should contain no more intersections to the left. @@ -418,15 +442,22 @@ } // Final step: Retrieve the resulting paths from the graph + // TODO: start from a path where childId === 1 var boolResult = new CompoundPath(); - var firstNode = true, nextNode; + var firstNode = true, nextNode, foundBasePath = false; while( firstNode ){ firstNode = nextNode = null; len = graph.length; while( len-- ){ if( !graph[len].INVALID && !graph[len].nodeIn.visited && !firstNode ){ - firstNode = graph[len].nodeIn; - break; + if( !foundBasePath && graph[len].childId === 1 ){ + firstNode = graph[len].nodeIn; + foundBasePath = true; + break; + } else if(foundBasePath){ + firstNode = graph[len].nodeIn; + break; + } } } if( firstNode ){ @@ -450,6 +481,27 @@ } +function markPoint( pnt, t, c, tc, remove ) { + if( !pnt ) return; + c = c || '#000'; + if( remove === undefined ){ remove = true; } + var cir = new Path.Circle( pnt, 2 ); + cir.style.fillColor = c; + cir.style.strokeColor = tc; + if( t !== undefined || t !== null ){ + var text = new PointText( pnt.add([0, -3]) ); + text.justification = 'center'; + text.fillColor = c; + text.content = t; + if( remove ){ + text.removeOnMove(); + } + } + if( remove ) { + cir.removeOnMove(); + } +} + // Same as the paperjs' Numerical class, // added here because I can't access the original from this scope var Numerical = { diff --git a/booleanStudy.html b/booleanStudy.html index b5ea3747..e9a46012 100644 --- a/booleanStudy.html +++ b/booleanStudy.html @@ -40,5 +40,17 @@ c4.17-10.207,9.736-20.396,15.764-32.207l22.473-43.104h22.707l-52.131,89.669v66.51H82.734z"/> + + + + diff --git a/booleanTests.js b/booleanTests.js index c62388fb..5c4295fa 100644 --- a/booleanTests.js +++ b/booleanTests.js @@ -75,6 +75,26 @@ function runTests() { pathB = group.children[1]; testBooleanStatic( pathA, pathB, caption ); + caption = prepareTest( 'CompoundPaths 1', container ); + var group = paper.project.importSvg( document.getElementById( 'glyphsacirc' ) ); + pathA = group.children[0]; + pathB = group.children[1]; + testBooleanStatic( pathA, pathB, caption ); + + caption = prepareTest( 'CompoundPaths 2', container ); + var group = paper.project.importSvg( document.getElementById( 'glyphsacirc' ) ); + pathA = group.children[0]; + pathB = new CompoundPath(); + pathB.addChild(group.children[1]); + var npath = new Path.Circle([110, 110], 30); + console.log(npath.clockwise) + pathB.addChild( npath ); + console.log(npath.clockwise) + testBooleanStatic( pathA, pathB, caption ); + + window.p = pathB; + + function prepareTest( testName, parentNode ){ console.log( '\n' + testName ); @@ -115,12 +135,14 @@ function testBooleanStatic( path1, path2, caption ) { var boolPathU = boolUnion( _p1U, _p2U ); console.timeEnd( 'Union' ); + window.b = boolPathU + var _p1I = path1.clone().translate( [560, 0] ); var _p2I = path2.clone().translate( [560, 0] ); console.time( 'Intersection' ); var boolPathI = boolIntersection( _p1I, _p2I ); console.timeEnd( 'Intersection' ); - + path1.style = path2.style = pathStyleNormal; _p1U.style = _p2U.style = _p1I.style = _p2I.style = pathStyleBoolean; boolPathU.style = boolPathI.style = booleanStyle; From aabec494461b0906b09ab913901684af473bf519 Mon Sep 17 00:00:00 2001 From: hkrish Date: Fri, 19 Apr 2013 19:49:44 +0200 Subject: [PATCH 05/48] Boolean Subtraction added --- Boolean.js | 103 +++++++++++++++++++++++++++++++++------------- booleanStudy.html | 4 +- booleanTests.js | 47 ++++++++++++--------- 3 files changed, 104 insertions(+), 50 deletions(-) diff --git a/Boolean.js b/Boolean.js index e262828c..fa2330da 100644 --- a/Boolean.js +++ b/Boolean.js @@ -57,6 +57,17 @@ return false; } return true; + }, + + // path1 - path2 + Subtraction: function( lnk, isInsidePath1, isInsidePath2 ){ + var lnkid = lnk.id; + if( lnkid === 1 && isInsidePath2 ){ + return false; + } else if( lnkid === 2 && !isInsidePath1 ){ + return false; + } + return true; } }; @@ -81,9 +92,9 @@ * @param {Point} _handleOut * @param {Any} _id */ - function Node( _point, _handleIn, _handleOut, _id, _childId ){ + function Node( _point, _handleIn, _handleOut, _id, isBaseContour ){ this.id = _id; - this.childId = _childId; + this.isBaseContour = isBaseContour; this.type = NORMAL_NODE; this.point = _point; this.handleIn = _handleIn; // handleIn @@ -95,6 +106,7 @@ // In case of an intersection this will be a merged node. // And we need space to save the "other Node's" parameters before merging. this.idB = null; + this.isBaseContourB = false; // this.pointB = this.point; // point should be the same this.handleBIn = null; this.handleBOut = null; @@ -120,6 +132,7 @@ this.linkOut.nodeIn = this; // linkOut.nodeStart this.handleIn = this.handleIn || this.handleBIn; this.handleOut = this.handleOut || this.handleBOut; + this.isBaseContour = this.isBaseContour | this.isBaseContourB; } this._segment = this._segment || new Segment( this.point, this.handleIn, this.handleOut ); return this._segment; @@ -132,9 +145,9 @@ * @param {Node} _nodeOut * @param {Any} _id */ - function Link( _nodeIn, _nodeOut, _id, _childId ) { + function Link( _nodeIn, _nodeOut, _id, isBaseContour ) { this.id = _id; - this.childId = _childId; + this.isBaseContour = isBaseContour; this.nodeIn = _nodeIn; // nodeStart this.nodeOut = _nodeOut; // nodeEnd this.nodeIn.linkOut = this; // nodeStart.linkOut @@ -157,14 +170,14 @@ * @param {Integer} id * @return {Array} Links */ - function makeGraph( path, id, childId ){ + function makeGraph( path, id, isBaseContour ){ var graph = []; var segs = path.segments, prevNode = null, firstNode = null, nuLink, nuNode; for( i = 0, l = segs.length; i < l; i++ ){ var nuSeg = segs[i].clone(); - nuNode = new Node( nuSeg.point, nuSeg.handleIn, nuSeg.handleOut, id, childId ); + nuNode = new Node( nuSeg.point, nuSeg.handleIn, nuSeg.handleOut, id, isBaseContour ); if( prevNode ) { - nuLink = new Link( prevNode, nuNode, id, childId ); + nuLink = new Link( prevNode, nuNode, id, isBaseContour ); graph.push( nuLink ); } prevNode = nuNode; @@ -173,12 +186,28 @@ } } // the path is closed - nuLink = new Link( prevNode, firstNode, id, childId ); + nuLink = new Link( prevNode, firstNode, id, isBaseContour ); graph.push( nuLink ); return graph; } +/** + * makes a graph for a pathItem + * @param {Path} path + * @param {Integer} id + * @return {Array} Links + */ +function makeGraph2( path, id ){ + var graph = []; + var curves = path.getCurves(), firstChildCount , counter, isBaseContour = true, i, len; + firstChildCount = ( path instanceof CompoundPath )? path.children[0].curves.length : path.curves.length; + // Segments need an ID, so that we can compare them + for (i = 0, len = curves.length; i < len; i++, firstChildCount--) { + } +} + + /** * Calculates the Union of two paths * Boolean API. @@ -186,7 +215,7 @@ * @param {Path} path2 * @return {CompoundPath} union of path1 & path2 */ - function boolUnion( path1, path2 ){ +function boolUnion( path1, path2 ){ return computeBoolean( path1, path2, BooleanOps.Union ); } @@ -198,11 +227,23 @@ * @param {Path} path2 * @return {CompoundPath} Intersection of path1 & path2 */ - function boolIntersection( path1, path2 ){ +function boolIntersection( path1, path2 ){ return computeBoolean( path1, path2, BooleanOps.Intersection ); } +/** + * Calculates path1—path2 + * Boolean API. + * @param {Path} path1 + * @param {Path} path2 + * @return {CompoundPath} path1 path2 + */ +function boolSubtract( path1, path2 ){ + return computeBoolean( path1, path2, BooleanOps.Subtraction ); +} + + /** * Actual function that computes the boolean * @param {Path} _path1 (cannot be self-intersecting at the moment) @@ -210,7 +251,7 @@ * @param {BooleanOps type} operator * @return {CompoundPath} boolean result */ - function computeBoolean( _path1, _path2, operator ){ +function computeBoolean( _path1, _path2, operator ){ IntersectionID = 1; UNIQUE_ID = 1; @@ -226,34 +267,36 @@ // full connectivity information. The order of links in a graph is not important // That allows us to sort and merge graphs and 'splice' links with their splits easily. // Also, this is the place to resolve self-intersecting paths - var graph = [], path1Children, path2Children; + var graph = [], path1Children, path2Children, base; if( path1 instanceof CompoundPath ){ path1Children = path1.children; - for (i = 0, l = path1Children.length; i < l; i++) { + for (i = 0, base = true, l = path1Children.length; i < l; i++, base = false) { path1Children[i].closed = true; - graph = graph.concat( makeGraph( path1Children[i], 1, i + 1 ) ); + graph = graph.concat( makeGraph( path1Children[i], 1, base ) ); } } else { path1.closed = true; - path1.clockwise = true; - graph = graph.concat( makeGraph( path1, 1, 1 ) ); + // path1.clockwise = true; + graph = graph.concat( makeGraph( path1, 1, 1, true ) ); } - // TODO: if operator === BooleanOps.subtract, then for path2, clockwise must be false + // if operator === BooleanOps.Subtraction, then reverse path2 + // so that the nodes and links will link correctly + var reverse = ( operator === BooleanOps.Subtraction )? true: false; if( path2 instanceof CompoundPath ){ path2Children = path2.children; - for (i = 0, l = path2Children.length; i < l; i++) { + for (i = 0, base = true, l = path2Children.length; i < l; i++, base = false) { path2Children[i].closed = true; - graph = graph.concat( makeGraph( path2Children[i], 2, i + 1 ) ); + if( reverse ){ path2Children[i].reverse(); } + graph = graph.concat( makeGraph( path2Children[i], 2, i + 1, base ) ); } } else { path2.closed = true; - path2.clockwise = true; - graph = graph.concat( makeGraph( path2, 2, 1 ) ); + // path2.clockwise = true; + if( reverse ){ path2.reverse(); } + graph = graph.concat( makeGraph( path2, 2, 1, true ) ); } - window.g = graph - // Sort function to sort intersections according to the 'parameter'(t) in a link (curve) function ixSort( a, b ){ return a._parameter - b._parameter; } @@ -289,6 +332,7 @@ } } + /* * Pass 2: * Walk the graph, sort the intersections on each individual link. @@ -297,7 +341,8 @@ for ( i = graph.length - 1; i >= 0; i--) { if( graph[i].intersections.length ){ var ix = graph[i].intersections; - ix.sort( ixSort ); + // Sort the intersections if there is more than one + if( graph[i].intersections.length > 1 ){ ix.sort( ixSort ); } // Remove the graph link, this link has to be split and replaced with the splits lnk = graph.splice( i, 1 )[0]; for (j =0, l=ix.length; j diff --git a/booleanTests.js b/booleanTests.js index 5825deaf..056c0c97 100644 --- a/booleanTests.js +++ b/booleanTests.js @@ -160,7 +160,7 @@ function runTests() { pathA = new Path.Rectangle(new Point(50.5, 50.5), [100, 120]); pathB = new CompoundPath(); pathB.addChild( new Path.Rectangle(new Point(140.5, 30.5), [100, 150]) ); - pathB.addChild( new Path.Rectangle(new Point(150.5, 60.5), [50, 100]) ); + pathB.addChild( new Path.Rectangle(new Point(150.5, 65.5), [50, 100]) ); // pathB = new Path.Rectangle(new Point(150.5, 80.5), [80, 80] ); testBooleanStatic( pathA, pathB, caption ); @@ -283,7 +283,6 @@ function testBooleanStatic( path1, path2, caption, noUnion, noIntersection, noSu var boolPathI = intersect( _p1I, _p2I ); console.timeEnd( 'Intersection' ); boolPathI.style = booleanStyle; - window.p = boolPathI } if( !noSubtraction ) { @@ -295,6 +294,27 @@ function testBooleanStatic( path1, path2, caption, noUnion, noIntersection, noSu console.timeEnd( 'Subtraction' ); boolPathS.style = booleanStyle; } + + if( !noSubtraction ) { + var _p1E = path1.clone().translate( [250, 220] ); + var _p2E = path2.clone().translate( [250, 220] ); + _p1E.style = _p2E.style = pathStyleBoolean; + console.time( 'Exclusion' ); + var boolPathE = exclude( _p1E, _p2E ); + console.timeEnd( 'Exclusion' ); + boolPathE.style = booleanStyle; + } + + if( !noSubtraction && !noIntersection) { + var _p1D = path1.clone().translate( [500, 220] ); + var _p2D = path2.clone().translate( [500, 220] ); + _p1D.style = _p2D.style = pathStyleBoolean; + console.time( 'Division' ); + var boolPathD = divide( _p1D, _p2D ); + console.timeEnd( 'Division' ); + disperse( boolPathD ); + boolPathD.style = booleanStyle; + } // } catch( e ){ // console.error( e.name + ": " + e.message ); // if( caption ) { caption.className += ' error'; } @@ -309,7 +329,7 @@ function testBooleanStatic( path1, path2, caption, noUnion, noIntersection, noSu function disperse( path, distance ){ distance = distance || 10; - if( ! path instanceof CompoundPath ){ return; } + if( ! path instanceof CompoundPath || ! path instanceof Group ){ return; } var center = path.bounds.center; var children = path.children, i ,len; for (i = 0, len = children.length; i < len; i++) { From 26c48786c8c1dd9f99f8c0abc24700197c443539 Mon Sep 17 00:00:00 2001 From: hkrish Date: Wed, 1 May 2013 23:32:25 +0200 Subject: [PATCH 48/48] Remove the proxy paths used for boolean --- Boolean2.js | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/Boolean2.js b/Boolean2.js index cf275c28..5266772b 100644 --- a/Boolean2.js +++ b/Boolean2.js @@ -173,7 +173,6 @@ function computeBoolean( path1, path2, operator, _splitCache ){ } else { paths.push( _path2 ); } - // step 1: discard invalid links according to the boolean operator var lastNode, firstNode, nextNode, midPoint, insidePath1, insidePath2; var thisId, thisWinding, contains, subtractionOp = (operator.name === 'subtraction'); @@ -219,7 +218,6 @@ function computeBoolean( path1, path2, operator, _splitCache ){ thisId = ( path.parent instanceof CompoundPath )? path.parent.id : path.id; thisWinding = path.clockwise; nuPath = new Path(); - // nuPath.selected = true; firstNode = null; firstNode_ix = null; if( node.previous.curve._INVALID ) { @@ -244,7 +242,6 @@ function computeBoolean( path1, path2, operator, _splitCache ){ } else { nuPath.add( node ); } - // view.draw() node = node.next; } if( nuPath.segments.length > 1 ) { @@ -255,14 +252,9 @@ function computeBoolean( path1, path2, operator, _splitCache ){ } } } - // if( operator.name === 'intersection' ){ - // window.p = boolResult.reduce(); - // } - // window.a = _path1; - // window.b = _path2; // Delete the proxies - // _path1.remove(); - // _path2.remove(); + _path1.remove(); + _path2.remove(); // And then, we are done. return boolResult.reduce(); } @@ -338,5 +330,3 @@ function divide( path1, path2 ){ var res = new Group( [res1, res2] ); return res; } - -