|
|
#include "../yScripts/y_JSExtensions.jsx";
|
|
|
|
|
|
function RenderToProject()
|
|
|
{
|
|
|
this.info =
|
|
|
{
|
|
|
name : "RenderToProject",
|
|
|
btn1 : "RenderToProject",
|
|
|
btn2 : "SetAllToProject",
|
|
|
version : 0.1,
|
|
|
stage : "development",
|
|
|
description : "Set Renders to project appropriate folders according to the studio folder structure.",
|
|
|
url : "yorchnet.com"
|
|
|
};
|
|
|
this.appearence =
|
|
|
{
|
|
|
buttonHeight : 30,
|
|
|
buttonWidth : 126
|
|
|
};
|
|
|
this.resources =
|
|
|
{
|
|
|
icon : new File('yNet.png'),
|
|
|
};
|
|
|
this.methods =
|
|
|
{
|
|
|
getSelectedProjectItems: function(){
|
|
|
var items = [];
|
|
|
//var debugItems = [];
|
|
|
var p = app.project;
|
|
|
for ( var i = 1 ; i <= p.numItems ; i ++ ){
|
|
|
var item = p.item(i);
|
|
|
|
|
|
if ( item.selected ){
|
|
|
items.push(item);
|
|
|
//debugItems.push(item.name);
|
|
|
}
|
|
|
}
|
|
|
//alert(debugItems);
|
|
|
return items;
|
|
|
},
|
|
|
pad : function ( n , pad ) {
|
|
|
zeros = "";
|
|
|
for ( i = 0 ; i < pad ; i ++ )
|
|
|
{
|
|
|
zeros+="0";
|
|
|
}
|
|
|
n = String(n);
|
|
|
padded = zeros.substr( 0, pad - n.length ) + String(n) ;
|
|
|
return padded
|
|
|
},
|
|
|
getTodayTag : function(){
|
|
|
var today = new Date();
|
|
|
var month_component = pad(String(today.getMonth()+1),2);
|
|
|
var date_component = pad(today.getDate(),2);
|
|
|
var full_year_component = String(today.getFullYear())
|
|
|
var year_component = full_year_component.substr(full_year_component.length - 2,full_year_component.length );
|
|
|
var tag = month_component + date_component + year_component
|
|
|
return tag;
|
|
|
},
|
|
|
getOutputBasePath : function(){
|
|
|
var file = app.project.file;
|
|
|
var file_path = String(app.project.file);
|
|
|
var gfx_output_base = "05_Graphics_Output";
|
|
|
var endtag_output_extra = "02_EndTags";
|
|
|
var scene_output_extra = "01_GFX_Scenes";
|
|
|
var vfx_output_base = "03_Composite_Outputs";
|
|
|
var vfx_output_base;
|
|
|
var gfx_string = "09_Graphics";
|
|
|
var vfx_string = "08_Composite";
|
|
|
var endtag_string = "EndTags";
|
|
|
|
|
|
var search_gfx = file_path.search(gfx_string);
|
|
|
var search_vfx = file_path.search(vfx_string);
|
|
|
var search_endtag = file_path.search(endtag_string);
|
|
|
var base_path;
|
|
|
|
|
|
if ( search_gfx != -1 ){
|
|
|
var base_path = file_path.substr(0,search_gfx+gfx_string.length)+"/"+gfx_output_base;
|
|
|
if ( search_endtag != -1 ){
|
|
|
base_path += "/" + endtag_output_extra;
|
|
|
}else{
|
|
|
base_path += "/" + scene_output_extra;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if( search_vfx != -1 ){
|
|
|
var base_path = file_path.substr(0,search_vfx+vfx_string.length)+"/"+vfx_output_base ;;
|
|
|
}
|
|
|
|
|
|
//alert(base_path);
|
|
|
|
|
|
return base_path + "/" + this.getTodayTag();
|
|
|
},
|
|
|
/*
|
|
|
setRenderToProjectPath : function( rqItem ){
|
|
|
if ( (rqItem.status == 3015) || (rqItem.status == 3013) ){
|
|
|
for ( var j = 1 ; j <= rqItem.numOutputModules ; j ++ ){
|
|
|
o_module = rqItem.outputModule(j);
|
|
|
|
|
|
var old_name = rqItem.comp.name.replace(".","_");
|
|
|
//alert(old_name);
|
|
|
if ( o_module.file != null ){
|
|
|
var new_path = this.getOutputBasePath();
|
|
|
var new_folder = Folder( new_path );
|
|
|
if ( !new_folder.exists ){
|
|
|
new_folder.create();
|
|
|
}
|
|
|
//alert(new_path + "/" + old_name)
|
|
|
var new_file = new File( new_path + "/" + old_name );
|
|
|
o_module.file = new_file ;
|
|
|
//alert ( new_path );
|
|
|
//o_module.file= new_file;
|
|
|
|
|
|
}
|
|
|
|
|
|
var p = String( o_module.file.path ).split("/");
|
|
|
|
|
|
p.splice(0,3);
|
|
|
|
|
|
var s = "";
|
|
|
|
|
|
for ( var i = 0 ; i < p.length ; i ++ ){
|
|
|
s += "\n"+p[i];
|
|
|
}
|
|
|
//alert( "Rendering to :" + "\n" + s + "\n\n" + o_module.file.name );
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
*/
|
|
|
setRenderToProjectPath : function( rqItem , extra_path ){
|
|
|
//alert(extra_path);
|
|
|
if ( (rqItem.status == 3015) || (rqItem.status == 3013) ){
|
|
|
for ( var j = 1 ; j <= rqItem.numOutputModules ; j ++ ){
|
|
|
o_module = rqItem.outputModule(j);
|
|
|
|
|
|
var old_name = rqItem.comp.name.replace(".","_");
|
|
|
//alert(old_name);
|
|
|
if ( o_module.file != null ){
|
|
|
if ( extra_path != undefined )
|
|
|
{
|
|
|
var new_path = this.getOutputBasePath()+ "/" +extra_path;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
var new_path = this.getOutputBasePath();
|
|
|
}
|
|
|
|
|
|
var new_folder = Folder( new_path );
|
|
|
if ( !new_folder.exists ){
|
|
|
new_folder.create();
|
|
|
}
|
|
|
//alert(new_path + "/" + old_name)
|
|
|
var new_file = new File( new_path + "/" + old_name );
|
|
|
o_module.file = new_file ;
|
|
|
//alert ( new_path );
|
|
|
//o_module.file= new_file;
|
|
|
|
|
|
}
|
|
|
|
|
|
var p = String( o_module.file.path ).split("/");
|
|
|
|
|
|
p.splice(0,3);
|
|
|
|
|
|
var s = "";
|
|
|
|
|
|
for ( var i = 0 ; i < p.length ; i ++ ){
|
|
|
s += "\n"+p[i];
|
|
|
}
|
|
|
//alert( "Rendering to :" + "\n" + s + "\n\n" + o_module.file.name );
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
setRendersToProjectPath : function(){
|
|
|
var q = app.project.renderQueue;
|
|
|
//check the render queue item is not already rendered.
|
|
|
for ( var i = 1 ; i <= q.numItems ; i ++ ){
|
|
|
item = q.item(i);
|
|
|
//3015 is QUEUED
|
|
|
//3013 is NEEDS_OUTPUT
|
|
|
|
|
|
if ( (item.status == 3015) || (item.status == 3013) ){
|
|
|
this.setRenderToProjectPath( item );
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
renderSelectedToProjectPath: function(){
|
|
|
var q = app.project.renderQueue;
|
|
|
var items = this.getSelectedProjectItems();
|
|
|
|
|
|
for ( var i = 0 ; i < items.length; i ++){
|
|
|
if( items[i].typeName == "Composition" ){
|
|
|
var item = items[i];
|
|
|
rqItem = q.items.add(item);
|
|
|
this.setRenderToProjectPath(rqItem);
|
|
|
}
|
|
|
//alert(items);
|
|
|
if( items[i].typeName == "Folder" ){
|
|
|
var folder = items[i];
|
|
|
for ( var j = 1 ; j <= folder.numItems ; j ++ )
|
|
|
{
|
|
|
var item = folder.items[j];
|
|
|
rqItem = q.items.add(item);
|
|
|
this.setRenderToProjectPath(rqItem, item.parentFolder.name );
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/*
|
|
|
for ( var i = 0 ; i < items.length; i ++){
|
|
|
if( items[i].typeName == "Composition" ){
|
|
|
var item = items[i];
|
|
|
rqItem = q.items.add(item);
|
|
|
this.setRenderToProjectPath(rqItem);
|
|
|
}
|
|
|
else if ( items[i].typeName == "Folder" )
|
|
|
{
|
|
|
var folder = items[i];
|
|
|
for ( var j = 1 ; j <= folder.numItems ; j ++ )
|
|
|
{
|
|
|
var item = folder.items[j];
|
|
|
rqItem = q.items.add(item);
|
|
|
this.setRenderToProjectPath(rqItem, item.parentFolder.name );
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
}*/
|
|
|
|
|
|
q.showWindow(true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
this.init = function init()
|
|
|
{
|
|
|
/*
|
|
|
* Sketching a possible multi button approach.
|
|
|
this.btnLauyout =
|
|
|
"group\
|
|
|
{\
|
|
|
btn1:Button{\
|
|
|
preferredSize: ['" + this.appearence.buttonWidth + "','" + this.appearence.buttonHeight + "'],\
|
|
|
text:'" + this.info.btn1 + "',\
|
|
|
onClick: "+ this.methods.setRendersToProjectPath;+" ,\
|
|
|
helpTip:'" + this.info.description + "'\
|
|
|
},\
|
|
|
btn2:Button{\
|
|
|
preferredSize: ['" + this.appearence.buttonWidth + "','" + this.appearence.buttonHeight + "'],\
|
|
|
text:'" + this.info.btn2 + "',\
|
|
|
helpTip:'" + this.info.description + "'\
|
|
|
}\
|
|
|
}";
|
|
|
*/
|
|
|
|
|
|
this.btnLauyout =
|
|
|
"button{\
|
|
|
preferredSize: ['" + this.appearence.buttonWidth + "','" + this.appearence.buttonHeight + "'],\
|
|
|
text:'" + this.info.btn1 + "',\
|
|
|
helpTip:'" + this.info.description + "'\
|
|
|
}";
|
|
|
|
|
|
|
|
|
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']\
|
|
|
},\
|
|
|
}\
|
|
|
}";
|
|
|
}
|
|
|
this.createUI = function createUI( )
|
|
|
{
|
|
|
var myUI = this;
|
|
|
var res =
|
|
|
" window {\
|
|
|
text: 'RenderToProject',\
|
|
|
alignment: ['fill','fill'], \
|
|
|
alignChildren: ['center','top'], \
|
|
|
orientation: 'column', \
|
|
|
resizeable: 'true'\
|
|
|
}";
|
|
|
|
|
|
myUI.window = new Window( res );
|
|
|
myUI.window.layout.layout(true);
|
|
|
|
|
|
myUI.window.show();
|
|
|
|
|
|
myUI.window.layout.onResizing = myUI.window.layout.onResize = function () { myUI.layout.resize();}
|
|
|
|
|
|
//EVENT HANDLERS
|
|
|
|
|
|
/*
|
|
|
myUI.window.tabs.search_tab.doItBtn.onClick = function(){
|
|
|
var search_str = myUI.window.tabs.search_tab.searchGrp.searchString.text;
|
|
|
var replace_str = myUI.window.tabs.search_tab.replaceGrp.replaceString.text;
|
|
|
myUI.methods.replace( myUI.methods.getSelectedProjectItems() , search_str , replace_str );
|
|
|
};
|
|
|
|
|
|
myUI.window.tabs.suprefix.suprefixGrp.pre.prefixBtn.onClick = function(){
|
|
|
var pre = myUI.window.tabs.suprefix.suprefixGrp.su.prefixString.text;
|
|
|
myUI.methods.prefix( myUI.methods.getSelectedProjectItems() , pre );
|
|
|
};
|
|
|
|
|
|
myUI.window.tabs.suprefix.suprefixGrp.su.sufixBtn.onClick = function(){
|
|
|
var su = myUI.window.tabs.suprefix.suprefixGrp.su.sufixString.text;
|
|
|
myUI.methods.suffix( myUI.methods.getSelectedProjectItems() , su );
|
|
|
};
|
|
|
|
|
|
myUI.window.tabs.rename_tab.renameGrp.renameBtn.onClick = function(){
|
|
|
var new_name = myUI.window.tabs.rename_tab.renameGrp.renameString.text;
|
|
|
myUI.methods.rename( myUI.methods.getSelectedProjectItems() , new_name );
|
|
|
};
|
|
|
*/
|
|
|
|
|
|
//END EVENT HANDLERS
|
|
|
|
|
|
return(this);
|
|
|
}
|
|
|
|
|
|
this.yMainFunction = function yMainFunction()
|
|
|
{
|
|
|
//Have to Separate this into "Operators" so I can have mutiple buttons in a single Tool.
|
|
|
w = this.methods.renderSelectedToProjectPath();
|
|
|
}
|
|
|
this.activate = function activate()
|
|
|
{
|
|
|
this.yTool.yMainFunction();
|
|
|
}
|
|
|
|
|
|
this.init();
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
//CHECKS that the toolbox exists, and if it doesn´t it runs the script on its own.
|
|
|
if (typeof(YTB)=='undefined')
|
|
|
{
|
|
|
rtp = new RenderToProject();
|
|
|
rtp.activate();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
YTB.addTool(new RenderToProject());
|
|
|
}
|