Skip to content

Instantly share code, notes, and snippets.

@eeropic
Last active May 29, 2017 14:19
Show Gist options
  • Select an option

  • Save eeropic/a956a85594462b95c55b2cb1011c1eff to your computer and use it in GitHub Desktop.

Select an option

Save eeropic/a956a85594462b95c55b2cb1011c1eff to your computer and use it in GitHub Desktop.
updated gist via ajax
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