diff --git a/AL_AddInBetween_NewIcons/2400-scripts/AL_AddInBetween.js b/AL_AddInBetween_NewIcons/2400-scripts/AL_AddInBetween.js new file mode 100644 index 0000000..a4cee81 --- /dev/null +++ b/AL_AddInBetween_NewIcons/2400-scripts/AL_AddInBetween.js @@ -0,0 +1,596 @@ + + +/******************************** A D D I N B E T W E E N ***************************/ +/* + + Author : Alexandre Cormier + New Icons : Loong (20250601) + Compatible : ToonBoom 20 + version : 1.2 + Creation Date : 14_11_2020 + Licence : Mozilla Public License Version 2.0 + + + Adds a key between two keyframes with interpolation factor. + + +*/ + + +function AL_AddInBetween(){ + + //MessageLog.trace(arguments.callee.name) + + scene.beginUndoRedoAccum("AL_PurgePalettesFiles"); + + InputDialog(); + + scene.endUndoRedoAccum(); + + function InputDialog (){ + + //MessageLog.trace(arguments.callee.name) + var d = new Dialog + d.title = "AL_AddInBetween"; + d.width = 100; + + var OrderInput = new ComboBox(); + OrderInput.label = "Percentage % : "; + OrderInput.editable = true; + OrderInput.itemList = [5,10,20,30,40,50,60,70,80,90,95]; + d.add( OrderInput ); + + + if ( d.exec() ){ + + var pourcentage = OrderInput.currentItem + + AddInBetween_process(pourcentage) + + } + + } + + +} + + + +/* FOR SEPARATED BUTTONS : */ + +function tween_10(){ + AddInBetween_process(10); +} + + + +function tween_20(){ + AddInBetween_process(20); +} + + +function tween_30(){ + AddInBetween_process(30); +} + +function tween_50(){ + AddInBetween_process(50); +} + +function tween_70(){ + AddInBetween_process(70); +} + +function tween_80(){ + AddInBetween_process(80); +} + +function tween_90(){ + AddInBetween_process(90); +} + + +function tween_120(){ + AddInBetween_process(120); +} + + +function tween_minus30(){ + AddInBetween_process(-30); +} + + + + +function AddInBetween_process(POURCENTAGE){ + + //MessageLog.trace(arguments.callee.name) + + var selected_nodes = selection.selectedNodes(0); + var CURRENT_FRAME = frame.current(); + var numSelLayers = Timeline.numLayerSel; + + + var nodes_to_treat = Array(); + var columns_to_treat = Array(); + + var float_factor = 100/parseFloat(POURCENTAGE) + + + nodes_to_treat = selected_layers_to_nodes(); + nodes_to_treat = filter_nodes_by_type(nodes_to_treat,["PEG","CurveModule","OffsetModule","BendyBoneModule","FreeFormDeformation"]) + columns_to_treat = fetch_colummns(nodes_to_treat) + columns_to_treat = filter_columns_by_type(columns_to_treat,["3DPATH","BEZIER","EASE","QUATERNIONPATH"]) // not supported : "QUATERNIONPATH" + + scene.beginUndoRedoAccum("AL_PurgePalettesFiles"); + + treat_columns(frame.current(),columns_to_treat,float_factor); + + scene.endUndoRedoAccum(); + + + // ************** FONCTIONS + + + // filters functions + + function selected_layers_to_nodes(){ + + //MessageLog.trace(arguments.callee.name) + + node_list = Array(); + + var numSelLayers = Timeline.numLayerSel; + + for ( var i = 0; i < numSelLayers; i++ ) + { + if ( Timeline.selIsNode( i ) ){ + node_list.push(Timeline.selToNode(i)); + } + } + + return unique_array(node_list); + + } + + function filter_nodes_by_type(nodes_list,relevant_types){ + + //MessageLog.trace(arguments.callee.name) + + //MessageLog.trace(nodes_list); + //MessageLog.trace(relevant_types); + var relevant_nodes = Array(); + + for(var n = 0 ; n < nodes_list.length; n++){ + + var currentNode = nodes_list[n]; + + //dynamic array search : add sub nodes to the loop + if(node.type(currentNode)=="GROUP"){ + + var currentGroup = currentNode + var subNodesInGroup= node.numberOfSubNodes(currentGroup); + + for (var sn = 0; sn0){ + columns_list = columns_list.concat(linked_columns); + } + } + + + return unique_array(columns_list); + + } + + + + + function treat_columns(_frame,column_list,factor){ + + //MessageLog.trace(arguments.callee.name) + //MessageLog.trace(column_list) + + for(var c = 0 ;c < column_list.length; c++){ + + var current_column = column_list[c] + add_inBetween_key(_frame,column_list[c],factor); + + } + + return true + + } + + + function get_next_bezierkey(_column,_frame){ + + //MessageLog.trace(arguments.callee.name) + + var key = false; + var s = 0; + + for (var f = _frame ; f<=frame.numberOf();f++){ + if(column.isKeyFrame(_column,s,f)){ + + //MessageLog.trace(f); + key = column.getEntry(_column,s,f) + return key; + + } + + + } + + return key; + + + + } + + function get_previous_bezierkey(_column,_frame){ + + //MessageLog.trace(arguments.callee.name) + + var key = false; + var s = 0; + + for (var f = _frame ; f>=0;f--){ + + if(column.isKeyFrame(_column,s,f)){ + + //MessageLog.trace(f); + key = column.getEntry(_column,s,f) + return key; + + } + + + } + + return key; + + + + } + + + function get_next_3Dkey(_column,_frame){ + + //MessageLog.trace(arguments.callee.name) + + sub_column = 4; + key = Array(); + s = 1; + + for (var f = _frame ; f<=frame.numberOf();f++){ + + + if(column.isKeyFrame(_column,s,f)){ + + for (s = s ; s=0;f--){ + + if(column.isKeyFrame(_column,s,f)){ + + for (s = s ; s 0){ + for (var j=0; j