2015-03-19 12:27:58 -07:00
yEntreDeux_data = new Object ();
yEntreDeux_data . scriptName = 'yBindBetween2' ;
yEntreDeux_data . scriptDesc = 'Constraints a layer between two others, position and rotation-wise' ;
yEntreDeux_data . scriptVer = '0.12a' ;
yEntreDeux_data . webLink = 'yorchnet.com' ;
//if yToolBox Exists add it to its tool list.
if ( typeof ( YTB ) !== 'undefined' ){
YTB . tools . push ( yEntreDeux_data );
//it should be called from toolbox.
/* yEntreDeux_data.buttonWidth=76;
yEntreDeux_data.buttonHeight=30;
*/
yEntreDeux_data . btnLayout = "btn_" + yEntreDeux_data . scriptName + ": Button { preferredSize: ['" + YTB . buttonWidth + "','" + YTB . buttonHeight + "'], text:'" + yEntreDeux_data . scriptName + "', helpTip:'" + yEntreDeux_data . scriptDesc + "' }" ;
}
//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------
// MAIN SCRIPT GOES HERE.
function build_yEntreDeux_data_UI (){
//script info
yEntreDeux_data = new Object ();
yEntreDeux_data . scriptName = 'yEntreDeux' ;
yEntreDeux_data . scriptVer = '0.1a' ;
yEntreDeux_data . webLink = 'yorchnet.com' ;
// GUI
//chk_stretch: Checkbox { text:'Stretch', alignment:['fill','center'] , helpTip:'Stretch between parents'},\
yEntreDeux_data . res = "window { \
type:'palette' , text:'" + yEntreDeux_data . scriptName + ' ' + yEntreDeux_data . scriptVer + "',margins:[10,10,10,10],spacing:[5,5,5,5]\
\
lst_layer: DropDownList {title:'layer to constrain',preferredSize:[150,35],textSelection:'Escoge',helpTip:'Select the layer you wish to constrain'}\
lst_pa: DropDownList {title:'parent a',preferredSize:[150,35],textSelection:'Escoge',helpTip:'Select the first parent'}\
lst_pb: DropDownList {title:'parent b',preferredSize:[150,35],textSelection:'Escoge',helpTip:'Select the second parent'}\
exec_btn: Button {text:'do It',preferredSize:[150,35],helpTip:'do it'}\
\
info: Group { \
alignment:['center','bottom'], \
icon: Image {preferredSize: [15, 18]},\
website: StaticText { text:'" + yEntreDeux_data . webLink + "', alignment:['fill','center'] },\
}\
\
}" ;
yEntreDeux_data . window = new Window ( yEntreDeux_data . res );
//never got around of assigning the icon any other way, but it works.
yEntreDeux_data . window . info . icon . image = YTB . icon ;
refresh (); // reloads the possible layers in the gui.
yEntreDeux_data . window . exec_btn . onClick = run ;
yEntreDeux_data . window . show ();
}
function run (){
app . beginUndoGroup ( 'Bind Between Two' );
selectedLayerName = String ( yEntreDeux_data . window . lst_layer . selection );
parentALayerName = String ( yEntreDeux_data . window . lst_pa . selection );
parentBLayerName = String ( yEntreDeux_data . window . lst_pb . selection );
layerN = selectedLayerName . substr ( 0 , selectedLayerName . indexOf ( '.' ));
paN = parentALayerName . substr ( 0 , parentALayerName . indexOf ( '.' ));
pbN = parentBLayerName . substr ( 0 , parentBLayerName . indexOf ( '.' ));
layer = app . project . activeItem . layers [ layerN ];
pa = app . project . activeItem . layers [ paN ];
pb = app . project . activeItem . layers [ pbN ];
layer ( "Effects" ). addProperty ( "Layer Control" );
layer ( "Effects" )( "Layer Control" ). name = 'ctrl01' ;
layer ( "Effects" )( "ctrl01" )( "Layer" ). setValue ( pa . index );
layer ( "Effects" ). addProperty ( "Layer Control" );
layer ( "Effects" )( "Layer Control" ). name = 'ctrl02' ;
layer ( "Effects" )( "ctrl02" )( "Layer" ). setValue ( pb . index );
layer ( "Effects" ). addProperty ( "Angle Control" );
layer ( "Effects" )( "Angle Control" ). name = 'offset' ;
layer ( "Effects" )( "offset" )( "Angle" ). setValue ( 0 );
layer ( "Effects" ). addProperty ( "Slider Control" );
layer ( "Effects" )( "Slider Control" ). name = 'weight' ;
layer ( "Effects" )( "weight" )( 1 ). setValue ( 50 );
layer ( "Effects" ). addProperty ( "Checkbox Control" );
layer ( "Effects" )( "Checkbox Control" ). name = 'stretch' ;
posExp =
'a = effect("ctrl01")("Layer");\
b = effect("ctrl02")("Layer");\
aPos = a.toComp(a.anchorPoint);\
bPos = b.toComp(b.anchorPoint);\
w= effect("weight")(1)/100;\
(aPos*(1-w)+bPos*(w))'
rotExp =
'a =effect("ctrl01")("Layer");\
b = effect("ctrl02")("Layer");\
aPos = a.toComp(a.anchorPoint);\
bPos = b.toComp(b.anchorPoint);\
rx = lookAt(aPos,bPos)[0];\
ry = lookAt(aPos,bPos)[1];\
offset = effect("offset")("Angle");\
if (aPos[1] > bPos[1])\
{\
(ry) -90 + offset\
}\
else\
{\
90 - (ry) + offset\
}'
scaleExp =
'a = effect("ctrl01")("Layer");\
b = effect("ctrl02")("Layer");\
aPos = a.toComp(a.anchorPoint);\
bPos = b.toComp(b.anchorPoint);\
d = Math.sqrt(Math.pow((aPos[0]-bPos[0]),2)+Math.pow((aPos[1]-bPos[1]),2));\
x = transform.scale[0];\
y = transform.scale[1];\
sx = ((d*100)/this.width)/100;\
stretch = effect("stretch")("Checkbox");\
if(stretch==true)\
{\
[x*sx,y]\
}\
else\
{\
[x,y]\
}'
layer . transform . position . expression = posExp ;
layer . transform . rotation . expression = rotExp ;
layer . transform . scale . expression = scaleExp ;
app . endUndoGroup ();
}
function refresh (){
//alert('going');
lists = [ yEntreDeux_data . window . lst_pa , yEntreDeux_data . window . lst_layer , yEntreDeux_data . window . lst_pb ] //they should be in this order for the assignment of the selection index works right/
for ( i = 0 ; i < lists.length ; i ++) {
lists [ i ] .removeAll ();
}
var sel = app.project.activeItem.selectedLayers ;
var compLayers = app.project.activeItem.layers ;
var selectableLayers = [];
for ( i = 1 ; i <= compLayers.length ; i ++) {
selectableLayers.push ( compLayers [ i ]);
}
var lst_layer = yEntreDeux_data.window.lst_layer ;
var lst_pa = yEntreDeux_data.window.lst_pa ;
var lst_pb = yEntreDeux_data.window.lst_pb ;
for ( i = 0 ; i < lists.length ; i ++) {
for ( j = 0 ; j < selectableLayers.length ; j ++) {
lists [ i ] .add (' item ', selectableLayers [ j ] .index +" . "+ selectableLayers [ j ] .name );
/* for ( i = 0 ; i < lists.length ; i ++) {
lists [ i ] .add (' item ', selectableLayers [ i ] .index +" . "+ selectableLayers [ i ] .name );
} */
// alert ( selectableLayers [ i ] .name )
}
// lists [ i ] .add (' item ', selectableLayers [ i ] .index +" . "+ selectableLayers [ i ] .name );
// lists [ i ] .add (' item ', selectableLayers [ i ] .index +" . "+ selectableLayers [ i ] .name );
// lists [ i ] .add (' item ', selectableLayers [ i ] .index +" . "+ selectableLayers [ i ] .name );
}
// var selIndex = sel [ 0 ] .index - 1 ;
lst_layer.selection = 0 ;
lst_pa.selection = 0 ;
lst_pb.selection = 0 ;
}
// build_yEntreDeux_UI ();
//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------
/*
function build_yEntreDeux_data_UI () {
yEntreDeux_data.window = new Window ( yEntreDeux_data.res );
yEntreDeux_data.window.show ();
}
*/
yEntreDeux_data.activate = build_yEntreDeux_data_UI ;
// CHECKS that the toolbox exists , and if it doesn ´ t it runs the script on its own.
if ( typeof ( YTB )==' undefined ') {
yEntreDeux_data.activate ();
} else {
}