// stroke_tone_line.jp
// Sunabe kazumichi 2009
// http://dp48069596.lolipop.jp/
//scriptographer.2.9.073-arrived/


// ------------------------  Dialog stuff  ------------------------ 

function dbug(msg)
{if (true)
		print('::debug: '+msg);
}

var values = {
	text: 'Tone_line',
	size: 10,
	scale: 100,
	count: 0,

};
var components = {
ruler1: {
		type: 'ruler', label: 'down'
	},
	dC: { type: 'number', label: 'C' ,value: 0, range: [0, 100]},
	dM: { type: 'number', label: 'M' ,value: 0, range: [0, 100]},	
	dY: { type: 'number', label: 'Y' ,value: 0, range: [0, 100]},
	dK: { type: 'number', label: 'K' ,value: 0, range: [0, 100]},
	dW: { type: 'number', label: 'W' ,value: 0.2,fractionDigits: 1},

ruler2: {
		type: 'ruler', label: 'up'
	},
	uC: { type: 'number', label: 'C' ,value: 50, range: [0, 100]},
	uM: { type: 'number', label: 'M' ,value: 0, range: [0, 100]},	
	uY: { type: 'number', label: 'Y' ,value: 0, range: [0, 100]},
	uK: { type: 'number', label: 'K' ,value: 0, range: [0, 100]},
	uW: { type: 'number', label: 'W' ,value: 0.2,fractionDigits: 1},
	
ruler3: {
		type: 'ruler'
	},
	uprot: { type: 'number', label: 'uprot' ,value: -30},
	dwrot: { type: 'number', label: 'dwrot' ,value: 30},	
	upoff: { type: 'number', label: 'upoff',value: 3 },
	dwoff: { type: 'number', label: 'dwoff' ,value: 3, },
	dist: { type: 'number', label: 'dist' ,value: 1, },
	
	 slantButton : {
		type: 'button', value: 'Slant',
		onClick: function() {
 	var uprotate=components.uprot.value;	
 	var dwnrotate=components.dwrot.value;	

	var upoffset=components.upoff.value;	
	var dwnoffset=components.dwoff.value;	

	var dist=components.dist.value;	

	var upc=components.uC.value;
	var upm=components.uM.value;
	var upy=components.uY.value;
	var upk=components.uK.value;
	var upwidth=components.uW.value;

	var dwnc=components.dC.value;
	var dwnm=components.dM.value;	
	var dwny=components.dY.value;	
	var dwnk=components.dK.value;	
	var dwnwidth=components.dW.value;			

		var art = new Path();		
	var shapes =  activeDocument.getItems({ 
    type: 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); 
 
	if(n.x != 0 || n.y != 0){
  		res.segments.add(pt.add(n.rotate(uprotate)));			
		
	}
		if(p.x != 0 || p.y != 0){
  		res2.segments.add(pt.add(p.rotate(dwnrotate)));		
	}		
	}

//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)));		
	}
	if(p.x != 0 || p.y != 0){
  		lastp2.segments.add(ptk.add(p.rotate(dwnrotate)));		
	};
	}
		}
		},
	pararelButton : {
		type: 'button', value: 'Pararel',
		onClick: function() {
	var upoffset=components.upoff.value;	
	var dwnoffset=components.dwoff.value;	

	var dist=components.dist.value;	

	var upc=components.uC.value;
	var upm=components.uM.value;
	var upy=components.uY.value;
	var upk=components.uK.value;
	var upwidth=components.uW.value;

	var dwnc=components.dC.value;
	var dwnm=components.dM.value;	
	var dwny=components.dY.value;	
	var dwnk=components.dK.value;	
	var dwnwidth=components.dW.value;			

		var art = new Path();		
		var shapes =  activeDocument.getItems({ 
    type: 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();

}
}	
		
		}
var palette = new Palette('Tone_line', components, values);
