|
|
yStopMotion_data = new Object();
|
|
|
|
|
|
yStopMotion_data.scriptName = 'yStopMotion';
|
|
|
yStopMotion_data.scriptDesc = 'Dynamically change layer sequence opacity from a slider in pComp';
|
|
|
yStopMotion_data.scriptVer = '0.1a';
|
|
|
yStopMotion_data.webLink = 'yorchnet.com';
|
|
|
|
|
|
//if yToolBox Exists add it to its tool list.
|
|
|
if (typeof(yToolBox_data)!=='undefined'){
|
|
|
yToolBox_data.tools.push(yStopMotion_data);
|
|
|
|
|
|
//it should be called from toolbox.
|
|
|
/* yStopMotion_data.buttonWidth=76;
|
|
|
yStopMotion_data.buttonHeight=30;
|
|
|
*/
|
|
|
yStopMotion_data.btnLayout = "btn_"+yStopMotion_data.scriptName+": Button { preferredSize: ['"+ yToolBox_data.buttonWidth+"','"+ yToolBox_data.buttonHeight+"'], text:'"+yStopMotion_data.scriptName+"', helpTip:'"+yStopMotion_data.scriptDesc+"' }";
|
|
|
|
|
|
}
|
|
|
|
|
|
yStopMotion_data.res = "window { \
|
|
|
type:'palette' , text:'"+yStopMotion_data.scriptName+' '+yStopMotion_data.scriptVer+"',\
|
|
|
\
|
|
|
\
|
|
|
info: Group { \
|
|
|
alignment:['center','bottom'], \
|
|
|
icon: Image {preferredSize: [15, 18]},\
|
|
|
website: StaticText { text:'"+yStopMotion_data.webLink+"', alignment:['fill','center'] },\
|
|
|
}\
|
|
|
\
|
|
|
}";
|
|
|
|
|
|
//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------
|
|
|
// MAIN SCRIPT GOES HERE.
|
|
|
|
|
|
e_0000 = "There are no comps in project."
|
|
|
e_0001 = "No Comps selected."
|
|
|
|
|
|
function yStopMotionLayer(){
|
|
|
myName = "yStopMotionLayer";
|
|
|
myVer = "0.2a";
|
|
|
nComps = app.project.items.length;
|
|
|
app.beginUndoGroup(myName);
|
|
|
if(nComps>0){
|
|
|
sel = app.project.activeItem.selectedLayers; //array containing selection;
|
|
|
if(sel.length == 1&&sel[0].source!= null){
|
|
|
|
|
|
myItem = sel[0].source;
|
|
|
myItemType = myItem.typeName;
|
|
|
|
|
|
if(myItemType!="Composition"){
|
|
|
alert(e_0001,myName+' '+myVer);
|
|
|
}else{
|
|
|
|
|
|
sliderCtrl = sel[0]("Effects").addProperty("Slider Control");
|
|
|
sliderCtrl.name = "Animation State"; //should check for previously created sliders named the same and name uniquely accordingly.
|
|
|
txtExpression = 'myLayer = thisLayer;myComp =comp(myLayer.name);\
|
|
|
max = myComp.numLayers;\
|
|
|
myValue = effect("'+sliderCtrl.name+'")("'+sliderCtrl("Slider").name+'");\
|
|
|
if(myValue<=max&&myValue>1){\
|
|
|
parseInt(myValue)\
|
|
|
}else if (myValue>max){\
|
|
|
max\
|
|
|
}else if(myValue<1){1}';
|
|
|
//'l = thisComp.layer('+'"'+app.project.activeItem.selectedLayers[0].name+'"'+');'+'fromWorld(l.toComp(l.transform.anchorPoint))';
|
|
|
sliderCtrl("Slider").expression = txtExpression;
|
|
|
sliderCtrl("Slider").setValue(1);
|
|
|
txtExpression = null;
|
|
|
nLayers =myItem.numLayers;
|
|
|
txtExpression = 'extValue = comp("'+sel[0].containingComp.name+'").layer("'+myItem.name+'").effect("'+sliderCtrl.name+'")("'+sliderCtrl("Slider").name+'");if(extValue == thisLayer.index){100}else{0}';
|
|
|
for (z=1;z<=nLayers;z++){
|
|
|
myItem.layer(z).opacity.expression=txtExpression;
|
|
|
}
|
|
|
txtExpression = null;
|
|
|
}
|
|
|
}else{
|
|
|
alert(e_0001,myName+' '+myVer);
|
|
|
}
|
|
|
}else{
|
|
|
alert(e_0000,myName+' '+myVer+" : Error");
|
|
|
}
|
|
|
app.endUndoGroup();
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------//--------
|
|
|
|
|
|
function build_yStopMotion_data_UI(){
|
|
|
yStopMotion_data.window = new Window ( yStopMotion_data.res);
|
|
|
yStopMotion_data.window.show();
|
|
|
}
|
|
|
yStopMotion_data.activate = yStopMotionLayer ;
|
|
|
|
|
|
//CHECKS that the toolbox exists, and if it doesn´t it runs the script on its own.
|
|
|
if (typeof(yToolBox_data)=='undefined'){
|
|
|
yStopMotion_data.activate();
|
|
|
}else{
|
|
|
}
|