diff --git a/ScriptUI Panels/yToolBox.jsx b/ScriptUI Panels/yToolBox.jsx index 4ca728f..af39052 100644 --- a/ScriptUI Panels/yToolBox.jsx +++ b/ScriptUI Panels/yToolBox.jsx @@ -1 +1,124 @@ -var scriptUIPanel = this; YTB = { info : { name : "yToolBox", ver : 0.5, status : "alpha", url : "yorchnet.com", description : "My mixed bag of tools" }, resources : { icon : new File('../yScripts/yNet.png'), header : new File('../yScripts/header.png') }, appearence : { buttonHeight : 30, buttonWidth : 126 }, tools : [], createUI : function createUI() { var res ="group\ {\ orientation:'column',\ alignment:['fill','fill'],\ margins:[0,0,0,0]\ header: Group\ {\ orientation:'column',\ alignment:['center','top'],\ margins:[0,0,0,0]\ title: Image\ {\ icon:'" + this.resources.header.path + '/' + this.resources.header.name + "',\ preferredSize: [175, 35]},\ ver: StaticText\ {\ text:'" + this.info.ver + "',\ alignment:['center','center']\ }\ desc: StaticText\ {\ text:'" + this.info.description + "',\ alignment:['center','center']\ },\ },\ main: Group\ {\ orientation:'column',\ alignment:['fill','fill'],\ alignChildren:['center','center'],\ },\ footer: Group\ {\ alignment:['center','bottom'], \ icn_app: Image {icon:'" + this.resources.icon.path + '/' + this.resources.icon.name + "',preferredSize: [15, 18]},\ txt_info: StaticText { text:'"+ this.info.url + "', alignment:['fill','center'] },\ }, \ }"; this.window.grp = this.window.add( res ); this.window.layout.layout(true); this.customizeUI(); //EventHandlerAssignment this.window.onResize = this.resize; this.window.onClose = this.close; this.window.onDraw = this.autoLayout; }, customizeUI : function customizeUI() { var g = this.window.graphics; var orange = g.newBrush(g.BrushType.SOLID_COLOR, [1, .45, 0, 1]); this.window.grp.main.graphics.backgroundColor = orange; }, addTool : function addTool( aTool ) { /**** TO DO ****/ // Check that the tool object is unique. // Call for a window resize so it refreshes propperly. this.tools.push( aTool ); var btn = this.window.grp.main.add( aTool.btnLauyout ); btn.onClick = aTool.activate; btn.yTool = aTool; // add a reference to the tool so I can access info on it later... //alert(btn.onClick); this.window.layout.layout(true); }, //EVENT HANDLERS resize : function resize() { this.layout.resize(); }, close : function close() { YTB = null; delete this; }, init : function init() { this.window = ( scriptUIPanel instanceof Panel ) ? scriptUIPanel: new Window( "palette" , this.info.name , undefined, { resizeable : true } ); this.createUI(); } }; YTB.init(); #include "../yScripts/y_setStructure.jsx"; #include "../yScripts/y_colorProbe.jsx"; #include "../yScripts/y_BindBetween2.jsx"; #include "../yScripts/y_CPOffset.jsx"; #include "../yScripts/y_GenericNewScript.jsx"; \ No newline at end of file +var scriptUIPanel = this; +YTB = +{ + info : + { + name : "yToolBox", + ver : 0.51, + status : "alpha", + url : "yorchnet.com", + description : "My mixed bag of tools" + }, + resources : + { + icon : new File('../yScripts/yNet.png'), + header : new File('../yScripts/header.png') + }, + appearence : + { + buttonHeight : 30, + buttonWidth : 126 + }, + tools : [], + createUI : function createUI() + { + var res ="group\ + {\ + orientation:'column',\ + alignment:['fill','fill'],\ + margins:[0,0,0,0]\ + header: Group\ + {\ + orientation:'column',\ + alignment:['center','top'],\ + margins:[0,0,0,0]\ + title: Image\ + {\ + icon:'" + this.resources.header.path + '/' + this.resources.header.name + "',\ + preferredSize: [175, 35]},\ + ver: StaticText\ + {\ + text:'" + this.info.ver + "',\ + alignment:['center','center']\ + }\ + desc: StaticText\ + {\ + text:'" + this.info.description + "',\ + alignment:['center','center']\ + },\ + },\ + main: Group\ + {\ + orientation:'column',\ + alignment:['fill','fill'],\ + alignChildren:['center','center'],\ + },\ + footer: Group\ + {\ + alignment:['center','bottom'], \ + icn_app: Image {icon:'" + this.resources.icon.path + '/' + this.resources.icon.name + "',preferredSize: [15, 18]},\ + txt_info: StaticText { text:'"+ this.info.url + "', alignment:['fill','center'] },\ + }, \ + }"; + this.window.grp = this.window.add( res ); + + this.window.layout.layout(true); + this.customizeUI(); + + //EventHandlerAssignment + this.window.onResize = this.resize; + this.window.onClose = this.close; + this.window.onDraw = this.autoLayout; + }, + customizeUI : function customizeUI() + { + var g = this.window.graphics; + var orange = g.newBrush(g.BrushType.SOLID_COLOR, [1, .45, 0, 1]); + this.window.grp.main.graphics.backgroundColor = orange; + }, + addTool : function addTool( aTool ) + { + /**** TO DO ****/ + // Check that the tool object is unique. + // Call for a window resize so it refreshes propperly. + + this.tools.push( aTool ); + + var btn = this.window.grp.main.add( aTool.btnLauyout ); + + btn.onClick = aTool.activate; + btn.yTool = aTool; // add a reference to the tool so I can access info on it later... + + //alert(btn.onClick); + + this.window.layout.layout(true); + + return aTool; + + }, + //EVENT HANDLERS + resize : function resize() + { + this.layout.resize(); + }, + close : function close() + { + YTB = null; + delete this; + }, + init : function init() + { + this.window = ( scriptUIPanel instanceof Panel ) ? scriptUIPanel: new Window( "palette" , this.info.name , undefined, { resizeable : true } ); + this.createUI(); + } + +}; + +YTB.init(); + +#include "../yScripts/y_setStructure.jsx"; +#include "../yScripts/y_colorProbe.jsx"; +#include "../yScripts/y_BindBetween2.jsx"; +#include "../yScripts/y_CPOffset.jsx"; +#include "../yScripts/y_puppetRig.jsx"; +#include "../yScripts/y_GenericNewScript.jsx"; diff --git a/yScripts/y_GenericNewScript.jsx b/yScripts/y_GenericNewScript.jsx index 75588c3..75182c0 100755 --- a/yScripts/y_GenericNewScript.jsx +++ b/yScripts/y_GenericNewScript.jsx @@ -4,7 +4,7 @@ function YGenericTool() this.info = { name : "yGenericTool", - version : 0.0, + version : 0.1, stage : "development", description : "Generic script to use as a base for new tools.", url : "yorchnet.com" diff --git a/yScripts/y_colorProbe.jsx b/yScripts/y_colorProbe.jsx index de9d248..d2bb677 100755 --- a/yScripts/y_colorProbe.jsx +++ b/yScripts/y_colorProbe.jsx @@ -6,7 +6,7 @@ function YColorProbe() this.info = { name : "yColorProbe", - version : 0.0, + version : 0.1, stage : "development", description : "Creates a Null that will Sample the selected layer within the specified radius.", url : "yorchnet.com" @@ -75,29 +75,37 @@ function YColorProbe() sel = undefined; } - 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(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; - myNull.label=2; - myNull.source.height=30; - myNull.source.width=30; - myNull.anchorPoint=(15,15); - - if(sel!==undefined){ - myNull("Effects")('sampledLayer')(1).setValue(sel.index); + if(sel!==undefined){ + 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(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; + myNull.label=2; + myNull.source.height=30; + myNull.source.width=30; + myNull.anchorPoint=(15,15); + + myNull("Effects")('sampledLayer')(1).setValue(sel.index); } + else + { + alert("Error : No layer selected.") + } + + + + app.endUndoGroup(); } diff --git a/yScripts/y_puppetRig.jsx b/yScripts/y_puppetRig.jsx index 75588c3..5fc17d3 100755 --- a/yScripts/y_puppetRig.jsx +++ b/yScripts/y_puppetRig.jsx @@ -1,12 +1,12 @@ #include "../yScripts/y_JSExtensions.jsx"; -function YGenericTool() +function YPuppetRigTool() { this.info = { - name : "yGenericTool", - version : 0.0, + name : "yPuppetRig", + version : 0.1, stage : "development", - description : "Generic script to use as a base for new tools.", + description : "Tool to create nulls at puppet pin locations, and link the latter to the former.", url : "yorchnet.com" }; this.appearence = @@ -17,10 +17,22 @@ function YGenericTool() this.resources = { icon : new File('yNet.png'), - }; + scriptName : 'yPuppetRigger', + scriptVer : 'v0.3.3a', + scriptDesc : 'Tools for streamlining puppet-based animation rigs.', + string_info : 'yorchnet.com', + e_000 : 'e_000 : No layers are selected.', + e_001 : 'e_001 : Layer contains no effects.', + e_002 : 'e_002 : Layer contains no Puppet effects.', + string_001 : 'Rig Pins', + string_001x : 'Rigs Selected Pins on Layer', + string_002 : 'Rig Layers', + string_002x : 'Rigs Selected Layers', + string_003 : 'Rig All', + string_003x : 'Rig All Layers in Comp' + }; this.init = function init() { - this.btnLauyout = "button\ {\ @@ -30,39 +42,55 @@ function YGenericTool() }"; this. res = - "window\ - {\ - type:'palette',\ - text:'" + this.info.name + ' ' + this.info.ver + ' ' + this.info.stage + "',\ - info: Group \ - {\ - alignment:['center','bottom'],\ - icon: Image \ - {\ - icon:'" + this.resources.icon.path + '/' + this.resources.icon.name + "',\ - preferredSize: [15, 18]\ - },\ - website: StaticText\ - {\ - text:'" + this.info.url + "',\ - alignment:['fill','center']\ - },\ - }\ - }"; + "window { \ + type:'palette' , text:'" + this.resources.scriptName + " " + this.resources.scriptVer + "',margins:[10,10,10,10],spacing:[5,5,5,5],\ + grp: Group { orientation:'column' , alignment:['fill','fill'] , alignChildren:['fill','fill'] , spacing:'2' , margin:'5', \ + btn_01: Button { preferredSize: ['" + this.appearence.buttonWidth + "','" + this.appearence.buttonHeight + "'], text:'" + this.resources.string_001 + "', helpTip:'" + this.resources.string_001x + "' }, \ + btn_02: Button { preferredSize: ['" + this.appearence.buttonWidth + "','" + this.appearence.buttonHeight + "'], text:'" + this.resources.string_002 + "', helpTip:'" + this.resources.string_002x + "' }, \ + btn_03: Button { preferredSize: ['" + this.appearence.buttonWidth + "','" + this.appearence.buttonHeight + "'], text:'" + this.resources.string_003 + "', helpTip:'" + this.resources.string_003x + "' }, \ + chk_optn: Checkbox { text:'Enable Options', alignment:['fill','center'] , helpTip:'Enable Advanced Options' },\ + optn: Panel{ text:'Options' , visible:'false', orientation:'row' , alignment:['fill','fill'] , alignChildren:['fill','fill'] , spacing:'2' , margin:'5', \ + nullSizeGrp: Group{ \ + orientation:'column' , alignment:['fill','fill'] , alignChildren:['fill','fill'] , spacing:'2' , margin:'5', \ + sldr_tit: StaticText { text:'Set Null Size in Pixels.', alignment:['fill','center'] },\ + sldr: Slider { value:'125' , minvalue:'6' , maxvalue:'250' , text:'alaverga', helpTip:'" + this.resources.string_001x + "' }, \ + sldr_Values_txt: Group{\ + orientation:'row' , alignment:['fill','fill'] , alignChildren:['center','fill'] , spacing:'2' , margin:'5', \ + mintxt: StaticText { text:'small', alignment:['left','fill'] },\ + medtxt: StaticText { text:'medium', alignment:['center','fill'] },\ + maxtxt: StaticText { text:'big', alignment:['right','fill'] },\ + }\ + otherOptionsGrp: Group{ \ + orientation:'row' , alignment:['fill','fill'] , alignChildren:['fill','fill'] , spacing:'8' , margin:'5', \ + chk_box_01: Checkbox { text:'Enable Draft Mode.', alignment:['fill','center'] , helpTip:'Mostly for oldschool pixelated stuff' },\ + chk_box_02: Checkbox { text:'Lock Layer', alignment:['fill','center'] , helpTip:'Lock layer after rigging.' },\ + },\ + }\ + },\ + info: Group { \ + alignment:['center','bottom'], \ + txt_info: StaticText { text:'" + this.resources.string_info + "', alignment:['fill','center'] },\ + }\ + }\ + }"; + + + + } this.createUI = function createUI() { - res = - "window {\ - resizeable : true\ - closeButton : true\ - text:'wtf'\ - }" - - this.window = new Window( res ); + this.window = new Window( this.res ); this.window.layout.layout(true); this.window.center(); this.window.show(); + + this.window.grp.optn.enabled = false; + + this.window.grp.btn_01.onClick = yPuppetRigTool.runRigPin; //Defines Button Action + this.window.grp.btn_02.onClick = yPuppetRigTool.runRigLayer; //Defines Button Action + this.window.grp.btn_03.onClick = yPuppetRigTool.runRigAll; //Defines Button Action + this.window.grp.chk_optn.onClick = yPuppetRigTool.toggleOptions; } this.yMainFunction = function yMainFunction() { @@ -73,6 +101,150 @@ function YGenericTool() this.yTool.yMainFunction(); } + /**/ + this.toggleOptions = function toggleOptions(){ + if(this.window.grp.chk_optn==true){ + this.window.grp.chk_optn=false; + } + else + { + this.window.grp.chk_optn=true; + } + this.window.grp.optn.enabled = this.window.grp.chk_optn; + } + this.customColors = function customColors(rsr){ + g = rsr.graphics; + myBrush = g.newBrush(g.BrushType.SOLID_COLOR, [0.25, 0.05, 0.25, 1]); + g.backgroundColor = yToolBoxPalette.graphics.backgroundColor; + } + this.getPuppetEffects = function getPuppetEffects(aLayer){ + puppetEffects = [] + for(i=1;i<=aLayer('Effects').numProperties;i++){ + puppetEffects.push(aLayer('Effects')(i)); + } + return puppetEffects; + } + this.getPosPins = function getPosPins(aLayer){ + puppetEffects = this.getPuppetEffects(aLayer); + if(puppetEffects.length>0){ + posPins = []; + for(i=0;i