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; /* myNull = app.project.activeItem.layers.addNull(); myNull.transform.anchorPoint.setValue([50,50]); myNull.name = yUniStr('colorProbe'); //Generates a Unique Name by adding numbers at the end of the main string. layerCTRL = myNull("Effects").addProperty("Layer Control"); layerCTRL.name='sampledLayer'; colorCTRL = myNull("Effects").addProperty("Color Control"); colorCTRL.name='outColor'; radiusCTRL = myNull("Effects").addProperty("Slider Control"); radiusCTRL.name ='radius'; myNull("Effects")("radius")('Slider').setValue(0.5); colExp = 'myLayer = thisLayer("Effects")("sampledLayer")("Layer");\ p = thisLayer.toWorld(thisLayer.transform.anchorPoint);\ r = thisLayer("Effects")("radius")("Slider");\ myLayer.sampleImage(p, radius = [r, r], postEffect=true, t=time)'; myNull("Effects")('outColor')('Color').expression=colExp; */ 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