mirror of
https://github.com/jorgevasquezp/AFX_yTools.git
synced 2026-08-16 15:30:59 +00:00
Added a tool to render a still frame for each of the markers contained in a dummy layer called 'Render'.
This commit is contained in:
@@ -0,0 +1,292 @@
|
||||
#include "../yScripts/y_JSExtensions.jsx";
|
||||
|
||||
function RenderMarkers()
|
||||
{
|
||||
this.info =
|
||||
{
|
||||
name : "Render Markers",
|
||||
version : 0.1,
|
||||
stage : "development",
|
||||
description : 'Render all markers in dummy layer "Renders".',
|
||||
url : "yorchnet.com"
|
||||
};
|
||||
this.appearence =
|
||||
{
|
||||
buttonHeight : 30,
|
||||
buttonWidth : 126
|
||||
};
|
||||
this.resources =
|
||||
{
|
||||
icon : new File('yNet.png'),
|
||||
};
|
||||
this.methods =
|
||||
{
|
||||
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
|
||||
},
|
||||
replace: function( items , string , newString ){
|
||||
for ( i = 0 ; i < items.length ; i ++ ){
|
||||
var item = items[i];
|
||||
item.name = item.name.replace( string , newString );
|
||||
}
|
||||
return true;
|
||||
},
|
||||
getSelectedProjectItems: function (){
|
||||
var items = [];
|
||||
var p = app.project;
|
||||
for ( var i = 1 ; i <= p.numItems ; i ++ ){
|
||||
var item = p.item(i);
|
||||
if ( item.selected ){
|
||||
items.push(item);
|
||||
}
|
||||
}
|
||||
//items = items.concat( app.project.activeItem.selectedItems );
|
||||
return items;
|
||||
},
|
||||
suffix: function ( items , suffix ){
|
||||
for ( i = 0 ; i < items.length ; i ++ ){
|
||||
var item = items[i];
|
||||
if ( item.name.search( suffix ) != (item.name.length - suffix.length) ){
|
||||
item.name+= "_"+suffix;
|
||||
}
|
||||
|
||||
}
|
||||
return true;
|
||||
},
|
||||
prefix : function( items , prefix ){
|
||||
for ( i = 0 ; i < items.length ; i ++ )
|
||||
{
|
||||
var item = items[i];
|
||||
if ( item.name.search( prefix ) != 0 ){
|
||||
item.name = prefix + "_" + item.name;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
rename: function ( items , new_name ){
|
||||
for ( i = 0 ; i < items.length ; i ++ ){
|
||||
var item = items[i];
|
||||
item.name = new_name + "_" + i;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
this.init = function init()
|
||||
{
|
||||
|
||||
this.btnLauyout =
|
||||
"button\
|
||||
{\
|
||||
preferredSize: ['" + this.appearence.buttonWidth + "','" + this.appearence.buttonHeight + "'],\
|
||||
text:'" + this.info.name + "',\
|
||||
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: 'RenderMarkers',\
|
||||
alignment: ['fill','fill'], \
|
||||
alignChildren: ['center','top'], \
|
||||
orientation: 'column', \
|
||||
resizeable: 'true'\
|
||||
}"
|
||||
var res =
|
||||
"window { \
|
||||
text: 'RenderMarkers',\
|
||||
alignment: ['fill','fill'], \
|
||||
alignChildren: ['center','top'], \
|
||||
orientation: 'column', \
|
||||
resizeable: 'true',\
|
||||
tabs: Panel {\
|
||||
type: 'tabbedpanel',\
|
||||
alignment: ['fill','fill'], \
|
||||
alignChildren: ['center','top'], \
|
||||
search_tab: Panel {\
|
||||
type: 'tab',\
|
||||
text: 'Search & Replace',\
|
||||
orientation: 'column', \
|
||||
alignChildren: ['center','top'], \
|
||||
searchGrp: Group {\
|
||||
alignment: ['fill','fill'], \
|
||||
alignChildren: ['center','top'], \
|
||||
orientation: 'column', \
|
||||
searchString: EditText {text:'SEARCH FOR TEXT',alignment: ['fill','center']}, \
|
||||
},\
|
||||
replaceGrp: Group {\
|
||||
alignment: ['fill','fill'], \
|
||||
alignChildren: ['center','center'], \
|
||||
orientation: 'column', \
|
||||
replaceString: EditText {text:'REPLACE WITH TEXT',alignment: ['fill','center']}, \
|
||||
}\
|
||||
doItBtn: Button {text: 'Replace in selected Comps', alignment: ['center','center']} , \
|
||||
}\
|
||||
suprefix: Panel {\
|
||||
type: 'tab',\
|
||||
text: 'Suffix / Prefix',\
|
||||
orientation: 'column', \
|
||||
suprefixGrp: Group {\
|
||||
alignment: ['fill','fill'], \
|
||||
alignChildren: ['left','center'], \
|
||||
orientation: 'column', \
|
||||
pre:Group {\
|
||||
alignment: ['fill','fill'], \
|
||||
alignChildren: ['left','center'], \
|
||||
orientation: 'row', \
|
||||
prefixString: EditText {text:'PREFIX',alignment: ['fill','center']}, \
|
||||
prefixBtn: Button {text: 'Preffix'} , \
|
||||
},\
|
||||
su:Group{\
|
||||
alignment: ['fill','fill'], \
|
||||
alignChildren: ['left','center'], \
|
||||
orientation: 'row', \
|
||||
sufixString: EditText {text:'SUFIX',alignment: ['fill','center']}, \
|
||||
sufixBtn: Button {text: 'Sufix'} , \
|
||||
}\
|
||||
},\
|
||||
},\
|
||||
rename_tab: Panel {\
|
||||
type: 'tab',\
|
||||
text: 'Rename',\
|
||||
renameGrp: Group {\
|
||||
alignment: ['fill','fill'], \
|
||||
alignChildren: ['left','center'], \
|
||||
orientation: 'row', \
|
||||
renameString: EditText {text:'NEW NAME',alignment: ['fill','center']}, \
|
||||
renameBtn: Button {text: 'Rename'} ,\
|
||||
}\
|
||||
}\
|
||||
},\
|
||||
}";
|
||||
|
||||
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.renderMarkers = function renderMarkers(){
|
||||
p = app.project;
|
||||
rq = p.renderQueue;
|
||||
rqi = rq.items;
|
||||
comp = p.activeItem;
|
||||
|
||||
var myRenderNull = comp.layer("Render");
|
||||
if ( myRenderNull == null ){
|
||||
myRenderNull = app.project.activeItem.layers.addNull();
|
||||
myRenderNull.name = "Render";
|
||||
myRenderNull.inPoint = -1;
|
||||
myRenderNull.outPoint = -1;
|
||||
alert('Created "Render Stills" layer.\nAdd markers to this layer and run again to render stills.');
|
||||
}
|
||||
|
||||
markers= myRenderNull.property("Marker");
|
||||
|
||||
for ( var j = 1 ; j <= markers.numKeys ; j ++ ){
|
||||
i = rqi.add( comp );
|
||||
var destPath = i.outputModule(1).file.path;
|
||||
i.outputModule(1).applyTemplate("PNG+");
|
||||
var markerName = markers.keyValue(j).comment;
|
||||
i.timeSpanStart = markers.keyTime(j);
|
||||
i.timeSpanDuration = comp.frameDuration;
|
||||
|
||||
var destName = comp.name.replace(" ","_");
|
||||
|
||||
var destFrame = markers.keyTime(j) / comp.frameDuration;
|
||||
if ( markerName == "" ){
|
||||
i.outputModule(1).file = new File( destPath + "/" + destName + "_Still_f" + "[####]" )
|
||||
}else{
|
||||
i.outputModule(1).file = new File( destPath + "/" + destName + "_Still" + "_f[####]_" + markerName )
|
||||
}
|
||||
//alert( i.outputModule(1).file );
|
||||
//i.outputModule(1).includeSourceXMP = true;
|
||||
rq.render();
|
||||
}
|
||||
//alert(i.timeSpanStart);
|
||||
//alert(i.timeSpanDuration);
|
||||
|
||||
}
|
||||
this.yMainFunction = function yMainFunction()
|
||||
{
|
||||
w = RenderMarkers().renderMarkers();
|
||||
}
|
||||
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')
|
||||
{
|
||||
gt = new RenderMarkers();
|
||||
gt.activate();
|
||||
}
|
||||
else
|
||||
{
|
||||
YTB.addTool(new RenderMarkers());
|
||||
}
|
||||
Reference in New Issue
Block a user