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/RenderToProject.jsx

351 lines
9.2 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.

#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 );
//So long stupid confusing date system, hehe
//var tag = month_component + date_component + year_component;
var tag = year_component + month_component + date_component ;
return tag;
},
getOutputBasePath : function(){
var file = app.project.file;
var file_path = String(file);
//yorchnet folderstructure
pro_folder = "pro"
folder2d = "2d"
folder3d = "3d"
var search_3d = file_path.search(folder3d);
var search_2d = file_path.search(folder2d);
var base_path;
if( search_2d != -1 ){
var base_path = file_path.substr(0,file_path.search(pro_folder)+pro_folder.length) +"/"+ folder2d ;;
}
if( search_3d != -1 ){
var base_path = file_path.substr(0,file_path.search(pro_folder)+pro_folder.length) +"/"+ folder3d ;;
}
//alert(base_path);
return base_path + "/" + "renders" + "/" + 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());
}