You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AFX_yTools/yScripts/y_yBindBetween2.jsx

1 line
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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{
}