Last active
May 29, 2017 14:19
-
-
Save eeropic/a956a85594462b95c55b2cb1011c1eff to your computer and use it in GitHub Desktop.
updated gist via ajax
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Number.prototype.mod = function(n) {return ((this%n)+n)%n;}; | |
| project.currentStyle={strokeWidth:10,strokeColor:"black"}; | |
| function getCenterPt(path){ | |
| var xC=[]; | |
| var yC=[]; | |
| for(var i=0;i<path.segments.length;i++){ | |
| xC.push(path.segments[i].point.x); | |
| yC.push(path.segments[i].point.y); | |
| } | |
| sumX = xC.reduce((previous, current) => current += previous); | |
| sumY = yC.reduce((previous, current) => current += previous); | |
| avgX = sumX / xC.length; | |
| avgY = sumY / yC.length; | |
| return new Point(avgX,avgY) | |
| } | |
| function getAngle(a1,a2){ | |
| var diff = (a2+180) - (a1+180); | |
| while(diff<-180)diff+=360; | |
| while(diff>180)diff-=360; | |
| return diff; | |
| } | |
| var drawTool=new Tool(); | |
| delta=new Point(0,0) | |
| drawTool.on({ | |
| mousedown:function(event){ | |
| if(!event.modifiers.shift && !event.modifiers.option){ | |
| this.path=new Path(); | |
| this.path.selected=true; | |
| } | |
| if(event.modifiers.shift && !event.modifiers.option){ | |
| var hit=project.hitTest(event.point) | |
| if(hit){ | |
| if(hit.item){ | |
| hit.item.selected=true; | |
| var centerPt=hit.item.data.centerPt; | |
| dragPosition=event.point-centerPt; | |
| } | |
| } | |
| if(project.selectedItems.length>0){ | |
| var sel=project.selectedItems[0]; | |
| var centerPt=getCenterPt(sel); | |
| dragPosition=event.point-centerPt; | |
| dragDelta=event.point-centerPt; | |
| } | |
| } | |
| if(!event.modifiers.shift && event.modifiers.option){ | |
| for(var i=0;i<project.activeLayer.children.length;i++){ | |
| var item=project.activeLayer.children[i]; | |
| var nearestPt=item.getLocationOf(item.getNearestPoint(event.point)) | |
| var nearestSeg=item.getNearestLocation(event.point).segment; | |
| var diff=nearestPt.point-nearestSeg.point; | |
| if(diff.length>10)item.divideAt(nearestPt) | |
| } | |
| } | |
| if(event.modifiers.shift && event.modifiers.option){ | |
| for(var i=0;i<project.activeLayer.children.length;i++){ | |
| var item=project.activeLayer.children[i]; | |
| item.simplify(); | |
| } | |
| } | |
| }, | |
| mousedrag:function(event){ | |
| if(!event.modifiers.shift && !event.modifiers.option){ | |
| this.path.add(event.point) | |
| } | |
| if(event.modifiers.shift && !event.modifiers.option) { | |
| var sel=project.selectedItems[0]; | |
| var radius=(sel.bounds.width>sel.bounds.height)?sel.bounds.width:sel.bounds.height; | |
| var centerPt=getCenterPt(sel) | |
| delta=event.point-centerPt | |
| oldAngle=dragDelta.angle; | |
| dragDelta=delta; | |
| var dist=Math.max(0.01,delta.length/radius); | |
| var diff=getAngle(oldAngle,dragDelta.angle) | |
| sel.position+=(event.delta/Math.sqrt(dist*20)) | |
| sel.rotate(diff*dist*2) | |
| } | |
| if(!event.modifiers.shift && event.modifiers.option){ | |
| for(var i=0;i<project.activeLayer.children.length;i++){ | |
| var item=project.activeLayer.children[i]; | |
| for(var j=0;j<item.segments.length;j++){ | |
| var delta=event.point-item.segments[j].point; | |
| var dist=Math.max(0,100-Math.abs(delta.length))/50; | |
| item.segments[j].point+=event.delta*dist; | |
| item.segments[j].selected=true; | |
| //var hIn=item.segments[j].handleIn.rotate(2); | |
| //var hOut=item.segments[j].handleOut.rotate(2); | |
| //item.segments[j].handleIn=hIn; | |
| //item.segments[j].handleOut=hOut; | |
| } | |
| //item.flatten(10) | |
| item.smooth({type:'catmull-rom'}); | |
| //item.reduce(); | |
| } | |
| } | |
| if(event.modifiers.shift && event.modifiers.option){ | |
| for(var i=0;i<project.activeLayer.children.length;i++){ | |
| var item=project.activeLayer.children[i]; | |
| for(var j=0;j<item.segments.length;j++){ | |
| var delta=event.point-item.segments[j].point; | |
| var dist=Math.abs(delta.length) | |
| if(dist<10)item.segments[j].remove(); | |
| //item.segments[j].point+=event.delta*dist; | |
| //var hIn=item.segments[j].handleIn.rotate(2); | |
| //var hOut=item.segments[j].handleOut.rotate(2); | |
| //item.segments[j].handleIn=hIn; | |
| //item.segments[j].handleOut=hOut; | |
| } | |
| //item.flatten(10) | |
| //item.smooth(); | |
| //item.reduce(); | |
| } | |
| } | |
| }, | |
| mouseup:function(event){ | |
| if(!event.modifiers.shift && !event.modifiers.option){ | |
| this.path.simplify(); | |
| } | |
| if(!event.modifiers.shift && event.modifiers.option){ | |
| // this.path.simplify(); | |
| } | |
| }, | |
| }) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment