// stroke_tone_line.jp
// Sunabe kazumichi 2009
// http://dp48069596.lolipop.jp/

//sample_parallel: (upoffset:1.5, dwnoffset:1.5, upwidth:3, dwnwidth:3, dist:1)


// ------------------------  Dialog stuff  ------------------------ 

var dialog = new FloatingDialog(FloatingDialog.OPTION_TABBED);
	dialog.setTitle("Stroke tone_line");

var uprotate = new Static(dialog){
	text:"uprot:",
	position: new Point(136, 16)
};
	uprotate.setSize(uprotate.bestSize);

var uprotateField = new TextEdit(dialog){
	bounds:[178, 14, 25, 20],
	text:"-30"
}

var dwnrotate = new Static(dialog){
	text:"dnrot:",
	position: new Point(136, 36)
};
	dwnrotate.setSize(dwnrotate.bestSize);

var dwnrotateField = new TextEdit(dialog){
	bounds:[178, 34, 25, 20],
	text:"30"
}

var upoffset = new Static(dialog){
	text:"upoffs:",
	position: new Point(136, 60)
};
	upoffset .setSize(upoffset .bestSize);

var upoffsetField = new TextEdit(dialog){
	bounds:[178, 58, 25, 20],
	text:"3"
};

var dwnoffset  = new Static(dialog){
	text:"dnoffs:",
	position: new Point(136, 80)
};
	dwnoffset.setSize(dwnoffset .bestSize);

var dwnoffsetField = new TextEdit(dialog){
	bounds:[178, 78, 25, 20],
	text:"2"
};

var dist  = new Static(dialog){
	text:"dist:",
	position: new Point(150, 104)
};
	dist.setSize(dist.bestSize);

var distField = new TextEdit(dialog){
	bounds:[178, 102, 25, 20],
	text:"1"
};
var upcColor = new Static(dialog){
	text:"C:",
	position:new Point(15, 22)
};
	upcColor.setSize(upcColor.bestSize);

var upcColorField = new TextEdit(dialog){
	bounds: [30, 20, 25, 20],
	text:"30"
};

var upmColor = new Static(dialog){
	text:"M:",
	position: new Point(15, 42)
};
	upmColor.setSize(upmColor.bestSize);

var upmColorField = new TextEdit(dialog){
	bounds:[30, 40, 25, 20],
	text:"0"
}

var upyColor = new Static(dialog){
	text:"Y:",
	position:new Point(15, 62)
};
	upyColor.setSize(upyColor.bestSize);

var upyColorField = new TextEdit(dialog){
	bounds: [30, 60, 25, 20],
	text:"0"
};

var upkColor = new Static(dialog){
	text:"K:",
	position: new Point(15, 82)
};
	upkColor.setSize(upkColor.bestSize);

var upkColorField = new TextEdit(dialog){
	bounds:[30, 80, 25, 20],
	text:"0"
}

var upwidth = new Static(dialog){
	text:"W:",
	position: new Point(12, 106)
};
	upwidth .setSize(upwidth .bestSize);

var upwidthField = new TextEdit(dialog){
	bounds:[30, 104, 25, 20],
	text:"0.2"
};
		
var dwncColor = new Static(dialog){
	text:"C:",
	position:new Point(76, 22)
};
	dwncColor.setSize(dwncColor.bestSize);

var dwncColorField = new TextEdit(dialog){
	bounds: [92, 20, 25, 20],
	text:"100"
};

var dwnmColor = new Static(dialog){
	text:"M:",
	position: new Point(76, 42)
};
	dwnmColor.setSize(dwnmColor.bestSize);

var dwnmColorField = new TextEdit(dialog){
	bounds:[92, 40, 25, 20],
	text:"0"
}

var dwnyColor = new Static(dialog){
	text:"Y:",
	position:new Point(76, 62)
};
	dwnyColor.setSize(dwnyColor.bestSize);

var dwnyColorField = new TextEdit(dialog){
	bounds: [92, 60, 25, 20],
	text:"0"
};

var dwnkColor = new Static(dialog){
	text:"K:",
	position: new Point(76, 82)
};
	dwnkColor.setSize(dwnkColor.bestSize);

var dwnkColorField = new TextEdit(dialog){
	bounds:[92, 80, 25, 20],
	text:"0"
}

var dwnwidth = new Static(dialog){
	text:"W:",
	position: new Point(72, 106)
};
	dwnwidth.setSize(dwnwidth.bestSize);

var dwnwidthField = new TextEdit(dialog){
	bounds:[92, 104, 25, 20],
	text:"0.2"
}

//------------------------------------
var transButton = new Button(dialog){
	text:"Parallel GO !!",
	position:new Point(110,136),
	onClick : function(){
	
var upoffset=parseFloat(upoffsetField.text);	
var dwnoffset=parseFloat(dwnoffsetField.text);	

var dist=parseFloat(distField.text);	

var upc=upcColorField.text;
var upm=upmColorField.text;
var upy=upyColorField.text;
var upk=upkColorField.text;
var upwidth=upwidthField.text;

var dwnc=dwncColorField.text;
var dwnm=dwnmColorField.text;	
var dwny=dwnyColorField.text;	
var dwnk=dwnkColorField.text;	
var dwnwidth=dwnwidthField.text;			

		var art = new Path();		
		var shapes =  activeDocument.getMatchingItems(Path, {selected: true});

	var upColor=new CMYKColor(upc/100,upm/100,upy/100,upk/100);	
	var dwnColor=new CMYKColor(dwnc/100,dwnm/100,dwny/100,dwnk/100);		
		

		for (var j = 0; j <shapes.length; j++) 			
	{		
			var art = shapes[j];		
			art.curvesToPoints(dist);	
			var count = art.curves.length;

	var up_center = new Path();
	up_center.style.stroke.width =upwidth;
	up_center.style.stroke.color =  upColor;
	 var bezier0 = art.curves[0];	
	 var pt0 = bezier0.getPoint(0);
	 var up0_n = bezier0.getNormal(-1).normalize(upoffset);  
	
	dwnColor = new CMYKColor(1,0,0,0);	
	var dwn_center = new Path();	
	dwn_center.style.stroke.width = dwnwidth;
	dwn_center.style.stroke.color =  dwnColor;			
      var dwn_bezier = art.curves[0];	
	var dwn_n = dwn_bezier.getNormal(-1).normalize(dwnoffset); 
	//dwn_center.moveTo(dwn_pt.add(dwn_n)); 
	up_center.moveTo(pt0.add(up0_n));

for (var k = 0; k < count; k++) {	
      var bezier = art.curves[k];
      var pt = bezier.getPoint(0);
      var dwn_bezier = art.curves[k];
 	//
    	var up_n = bezier.getNormal(-1).normalize(upoffset);   	 
    	var dwn_n = bezier.getNormal(1).normalize(dwnoffset); 
   var p =bezier.getNormal(0).normalize(dwnoffset); 
	if(up_n.x != 0 || up_n.y != 0 || dwn_n.x != 0 || dwn_n.y != 0){
  	up_center.segments.add(pt.add(up_n));	
	}
	if(dwn_n.x != 0 || dwn_n.y != 0){
  	dwn_center.segments.add(pt.add(dwn_n));
	}
}
//
//last point

	 var bezier = art.curves[count-1];	    
	 var pt = bezier.getPoint(1);
	    
    	var up_n  = bezier.getNormal(-1).normalize(upoffset); 
   	
   	var dwn_n = bezier.getNormal(1).normalize(dwnoffset); 
 
   if(up_n.x != 0 || up_n.y != 0 || dwn_n.x != 0 || dwn_n.y != 0){
  	up_center.segments.add(pt.add(up_n));	
	}
	if(dwn_n.x != 0 || dwn_n.y != 0){
  	dwn_center.segments.add(pt.add(dwn_n));
	}
	
activeDocument.redraw();

}
}	
};
transButton.setSize(90,20);

var transButton = new Button(dialog){
	text:"Slant GO !!",
	position:new Point(10,136),
	onClick : function(){
		
	var uprotate=uprotateField.text;	
	var dwnrotate=dwnrotateField.text;	

	var upoffset=parseFloat(upoffsetField.text);	
	var dwnoffset=parseFloat(dwnoffsetField.text);	

	var dist=parseFloat(distField.text);	

	var upc=upcColorField.text;
	var upm=upmColorField.text;
	var upy=upyColorField.text;
	var upk=upkColorField.text;
	var upwidth=upwidthField.text;

	var dwnc=dwncColorField.text;
	var dwnm=dwnmColorField.text;	
	var dwny=dwnyColorField.text;	
	var dwnk=dwnkColorField.text;	
	var dwnwidth=dwnwidthField.text;			

		var art = new Path();		
		var shapes =  activeDocument.getMatchingItems(Path, {selected: true});

	var upColor=new CMYKColor(upc/100,upm/100,upy/100,upk/100);	
	var dwnColor=new CMYKColor(dwnc/100,dwnm/100,dwny/100,dwnk/100);		
		
	for (var j = 0; j <shapes.length; j++) 			
	{		
			var art = shapes[j];		
			art.curvesToPoints(dist);	
			var count = art.curves.length;
			
			for (var k = 0; k <count; k++) {

	var res = new Path();
	var res2 = new Path();	
	res.style.stroke.width = upwidth;
	res.style.stroke.color =  upColor;	
	res2.style.stroke.width = dwnwidth;
	res2.style.stroke.color =  dwnColor;	
      var bezier = art.curves[k];
      var pt = bezier.getPoint(0);	
	var ptk = bezier.getPoint(k);

	res.moveTo(pt);
    	var n = bezier.getNormal(-1).normalize(upoffset); 
   	
   	res2.moveTo(pt);  
   	var p = bezier.getNormal(0).normalize(dwnoffset); 
 
        	// normalize(10) = offset from shape : 10 pts
	if(n.x != 0 || n.y != 0){
  		res.segments.add(pt.add(n.rotate(uprotate*Math.PI /180)));
	}
		if(p.x != 0 || p.y != 0){
  		res2.segments.add(pt.add(p.rotate(dwnrotate*Math.PI /180)));
	}		
	}	

//last point
	var lastp = new Path();
	var lastp2 = new Path();	
	lastp.style.stroke.width = upwidth;
	lastp.style.stroke.color =  upColor;	
	lastp2.style.stroke.width = dwnwidth;
	lastp2.style.stroke.color =  dwnColor;	

	 var bezier = art.curves[count-1];	    
	 var ptk = bezier.getPoint(1);
	    
 	lastp.moveTo(ptk);
    	var n = bezier.getNormal(-1).normalize(upoffset); 
   	
   	lastp2.moveTo(ptk);  
   	var p = bezier.getNormal(0).normalize(dwnoffset); 
 
   	if(n.x != 0 || n.y != 0){
  		lastp.segments.add(ptk.add(n.rotate(uprotate*Math.PI /180)));
	}
	if(p.x != 0 || p.y != 0){
  		lastp2.segments.add(ptk.add(p.rotate(dwnrotate*Math.PI /180)));
	}

activeDocument.redraw();

}
}	
};
transButton.setSize(80,20);

var thewordFrame=new Frame(dialog){
	text:"up",
	size:[60,130],
	position: new Point(3,0)
};

var pathFrame=new Frame(dialog){
	text:"down",
	size:[60,130],
	position:new Point(65,0)
};

dialog.setSize(212, 160);
dialog.setVisible(true);
dialog.onClose = function() {
        this.destroy();
};

