fix duplicate comps on parser
diff --git a/build/parser/bodymovin_parser.jsx b/build/parser/bodymovin_parser.jsx index a5ac8d7..9fa9c46 100644 --- a/build/parser/bodymovin_parser.jsx +++ b/build/parser/bodymovin_parser.jsx
@@ -956,6 +956,7 @@ callback.apply();*/ // END TO TRAVERSE LAYER BY LAYER. NEEDED FOR TIME REMAP? totalLayers = pendingLayers.length; + UI.setState('processing'); extrasInstance.setTimeout(analyzeNextLayer,100); } @@ -1678,7 +1679,6 @@ case PropertyValueType.ThreeD_SPATIAL: case PropertyValueType.TwoD_SPATIAL: bezierIn.x = 1 - key.easeIn.influence / 100; - $.writeln('bezierIn.x: ',bezierIn.x); bezierOut.x = lastKey.easeOut.influence / 100; averageSpeed = getCurveLength(lastKey.value,key.value, lastKey.to, key.ti)/duration; break; @@ -1997,6 +1997,7 @@ /****** END rqManager ******/ /****** INIT LayerConverter ******/ (function(){ + var compsIndexes; var pendingComps = []; var convertedSources = []; var duplicatedSources = []; @@ -2005,14 +2006,16 @@ var currentCompositionNum = 0; var totalLayers; var tempConverterComp; - var currentComposition; + var currentCompositionData; var currentSource; var currentLayerInfo; var duplicateMainComp; + var positions; var callback; function convertComposition(comp){ helperFolder = helperFootage.item(2); AssetsManager.reset(); + UI.setState('duplicating',comp.name); duplicateMainComp = comp.duplicate(); //duplicateMainComp.openInViewer() ; duplicateMainComp.parentFolder = helperFolder; @@ -2021,28 +2024,43 @@ pendingComps = []; convertedSources = []; duplicatedSources = []; - pendingComps.push(duplicateMainComp); + compsIndexes = []; + positions = []; + pendingComps.push({comp:duplicateMainComp,items:compsIndexes}); if(pendingComps.length == 1){ extrasInstance.setTimeout(iterateNextComposition,100); } }; + function changeSourceToLayers(comp,indexes){ + var i, len = indexes.length; + for(i=0;i<len;i+=1){ + var layerInfo = comp.layers[indexes[i].index]; + layerInfo.replaceSource(indexes[i].src,false); + if(indexes[i].items.length>0){ + changeSourceToLayers(layerInfo.source,indexes[i].items); + } + } + } + function iterateNextComposition(){ if(currentCompositionNum == pendingComps.length){ //TODO dar acceso externo a main comp //TODO despachar evento de fin + UI.setState('sourcing'); + changeSourceToLayers(duplicateMainComp,compsIndexes); callback.apply(null,[duplicateMainComp]); return; } - currentComposition = pendingComps[currentCompositionNum]; + currentCompositionData = pendingComps[currentCompositionNum]; currentLayerNum = 0; - totalLayers = currentComposition.layers.length; + totalLayers = currentCompositionData.comp.layers.length; extrasInstance.setTimeout(verifyNextItem,100); } function verifyNextItem(){ if(currentLayerNum<totalLayers){ - var layerInfo = currentComposition.layers[currentLayerNum+1]; + var layerInfo = currentCompositionData.comp.layers[currentLayerNum+1]; var lType = extrasInstance.layerType(layerInfo); if(lType == 'StillLayer' && layerInfo.enabled){ currentSource = layerInfo.source; @@ -2061,10 +2079,11 @@ } }else{ if(lType=='PreCompLayer'){ - var copy = searchCompositionDuplicate(layerInfo); - layerInfo.replaceSource(copy, false); - pendingComps.push(copy); - copy.parentFolder = helperFolder; + var src = searchCompositionDuplicate(layerInfo); + //layerInfo.replaceSource(copy, false); + var indexes = []; + currentCompositionData.items.push({index:currentLayerNum+1,src:src,items:indexes}); + pendingComps.push({comp:layerInfo.source,items:indexes}); } currentLayerNum++; extrasInstance.setTimeout(verifyNextItem,100); @@ -2083,7 +2102,10 @@ } i++; } + UI.setState('duplicating',layerInfo.source.name); var copy = layerInfo.source.duplicate(); + copy.parentFolder = helperFolder; + copy.parentFolder = helperFolder; //copy.openInViewer() ; duplicatedSources.push({s:layerInfo.source,c:copy}); return copy; @@ -2118,7 +2140,7 @@ } function replaceCurrentLayerSource(source){ - var layerInfo = currentComposition.layers[currentLayerNum+1]; + var layerInfo = currentCompositionData.comp.layers[currentLayerNum+1]; layerInfo.replaceSource(source, false); } @@ -2402,7 +2424,6 @@ extrasInstance.convertToBezierValues(prop.property('Opacity'), frameRate, ob,'o'); extrasInstance.convertToBezierValues(prop.property('Stroke Width'), frameRate, ob,'w'); var j, jLen = prop.property('Dashes').numProperties; - extrasInstance.iterateProperty(prop.property('Dashes').property(1)); var dashesData = []; var changed = false; for(j=0;j<jLen;j+=1){ @@ -2586,7 +2607,7 @@ } function start(){ - UI.setExportText('Starting export'); + UI.setState('start'); LayerConverter.convertComposition(mainComp); } @@ -2666,8 +2687,8 @@ compsColumns : {name:'Name',queue:'In Queue',destination:'Destination Path'}, imagesButtons : {refresh:'Refresh', exportTxt:'Export', notExportTxt:'Do not export'}, imagesColumns : {name:'Name',exportTxt:'Export'}, - renderTexts : {cancel:'Cancel Render'} - } + renderTexts : {cancel:'Cancel Render',start:'Starting export',duplicating:'Duplicating Comp: ',processing:'Processing layers',sourcing:'Changing sources'} + }; var availableCompositions = []; var bodyMovinPanel; var settingsGroup; @@ -2764,9 +2785,9 @@ /**** RENDER GROUP ****/ var renderGroupRes = "group{orientation:'column',alignment:['fill','fill'],alignChildren:['fill',fill'],\ - componentText:StaticText{text:'Rendering Composition ',alignment:['left','top']},\ + componentText:StaticText{text:'Rendering Composition ',alignment:['fill','top']},\ infoText:StaticText{text:'Exporting images ',alignment:['left','top']},\ - progress:Progressbar{value:50,alignment:['fill','top']},\ + progress:Progressbar{value:0,alignment:['fill','top']},\ cancelButton: Button{text:'"+UITextsData.renderTexts.cancel+"',alignment:['center','top']},\ }"; bodyMovinPanel.mainGroup.renderGroup = bodyMovinPanel.mainGroup.add(renderGroupRes); @@ -3112,6 +3133,27 @@ bodyMovinPanel.mainGroup.renderGroup.infoText.text = text; } + function setState(state,compName){ + switch(state){ + case 'start': + bodyMovinPanel.mainGroup.renderGroup.componentText.text = UITextsData.renderTexts.start; + setProgress(1); + break; + case 'duplicating': + bodyMovinPanel.mainGroup.renderGroup.componentText.text = UITextsData.renderTexts.duplicating + compName; + break; + case 'processing': + bodyMovinPanel.mainGroup.renderGroup.componentText.text = UITextsData.renderTexts.processing; + break; + case 'sourcing': + bodyMovinPanel.mainGroup.renderGroup.componentText.text = UITextsData.renderTexts.sourcing; + break; + default: + bodyMovinPanel.mainGroup.renderGroup.componentText.text = 'default: '+state; + break; + } + } + myScript_buildUI(bodymovinWindow); if (bodyMovinPanel != null && bodyMovinPanel instanceof Window){ bodyMovinPanel.center(); @@ -3121,6 +3163,7 @@ var ob ={}; ob.setExportText = setExportText; ob.setProgress = setProgress; + ob.setState = setState; UI = ob;
diff --git a/parser/CompConverter.js b/parser/CompConverter.js index 98dca68..c8f72b5 100644 --- a/parser/CompConverter.js +++ b/parser/CompConverter.js
@@ -105,7 +105,7 @@ } } //If it gets here there are no more compositions to render and callback is executed - //helperFootage.remove(); + helperFootage.remove(); endCallback.apply(); }
diff --git a/parser/LayerConverter.js b/parser/LayerConverter.js index a3119ab..c3a160c 100644 --- a/parser/LayerConverter.js +++ b/parser/LayerConverter.js
@@ -1,5 +1,6 @@ /****** INIT LayerConverter ******/ (function(){ + var compsIndexes; var pendingComps = []; var convertedSources = []; var duplicatedSources = []; @@ -8,10 +9,11 @@ var currentCompositionNum = 0; var totalLayers; var tempConverterComp; - var currentComposition; + var currentCompositionData; var currentSource; var currentLayerInfo; var duplicateMainComp; + var positions; var callback; function convertComposition(comp){ helperFolder = helperFootage.item(2); @@ -25,17 +27,22 @@ pendingComps = []; convertedSources = []; duplicatedSources = []; - pendingComps.push(duplicateMainComp); + compsIndexes = []; + positions = []; + pendingComps.push({comp:duplicateMainComp,items:compsIndexes}); if(pendingComps.length == 1){ extrasInstance.setTimeout(iterateNextComposition,100); } }; - function changeSourceToLayers(){ - var i, len = duplicatedSources.length; + function changeSourceToLayers(comp,indexes){ + var i, len = indexes.length; for(i=0;i<len;i+=1){ - duplicatedSources[i].l.replaceSource(duplicatedSources[i].c,false); - //layerInfo.replaceSource(copy, false); + var layerInfo = comp.layers[indexes[i].index]; + layerInfo.replaceSource(indexes[i].src,false); + if(indexes[i].items.length>0){ + changeSourceToLayers(layerInfo.source,indexes[i].items); + } } } @@ -43,19 +50,20 @@ if(currentCompositionNum == pendingComps.length){ //TODO dar acceso externo a main comp //TODO despachar evento de fin - changeSourceToLayers(); + UI.setState('sourcing'); + changeSourceToLayers(duplicateMainComp,compsIndexes); callback.apply(null,[duplicateMainComp]); return; } - currentComposition = pendingComps[currentCompositionNum]; + currentCompositionData = pendingComps[currentCompositionNum]; currentLayerNum = 0; - totalLayers = currentComposition.layers.length; + totalLayers = currentCompositionData.comp.layers.length; extrasInstance.setTimeout(verifyNextItem,100); } function verifyNextItem(){ if(currentLayerNum<totalLayers){ - var layerInfo = currentComposition.layers[currentLayerNum+1]; + var layerInfo = currentCompositionData.comp.layers[currentLayerNum+1]; var lType = extrasInstance.layerType(layerInfo); if(lType == 'StillLayer' && layerInfo.enabled){ currentSource = layerInfo.source; @@ -74,9 +82,11 @@ } }else{ if(lType=='PreCompLayer'){ - searchCompositionDuplicate(layerInfo); + var src = searchCompositionDuplicate(layerInfo); //layerInfo.replaceSource(copy, false); - pendingComps.push(layerInfo.source); + var indexes = []; + currentCompositionData.items.push({index:currentLayerNum+1,src:src,items:indexes}); + pendingComps.push({comp:layerInfo.source,items:indexes}); } currentLayerNum++; extrasInstance.setTimeout(verifyNextItem,100); @@ -89,29 +99,19 @@ function searchCompositionDuplicate(layerInfo){ var i=0,len = duplicatedSources.length; - $.writeln('--- new ---'); while(i<len){ - //$.writeln('duplicatedSources[i].s.source: ',duplicatedSources[i].s); - //$.writeln('layerInfo.source: ',layerInfo.source); - //$.writeln('layerInfo.source.name: ',layerInfo.source.name); - /*$.writeln('duplicatedSources[i].s.source.name: ',duplicatedSources[i].s.name); - $.writeln('layerInfo.source: ',layerInfo.source); - $.writeln('layerInfo.source.name: ',layerInfo.source.name);*/ if(duplicatedSources[i].s == layerInfo.source){ - $.writeln('is found'); - duplicatedSources.push({c:duplicatedSources[i].c,l:layerInfo}); - return; + return duplicatedSources[i].c; } i++; } - $.writeln('not found'); UI.setState('duplicating',layerInfo.source.name); var copy = layerInfo.source.duplicate(); copy.parentFolder = helperFolder; copy.parentFolder = helperFolder; //copy.openInViewer() ; - duplicatedSources.push({s:layerInfo.source,c:copy,l:layerInfo}); - return; + duplicatedSources.push({s:layerInfo.source,c:copy}); + return copy; } function searchConvertedSource(source){ @@ -143,7 +143,7 @@ } function replaceCurrentLayerSource(source){ - var layerInfo = currentComposition.layers[currentLayerNum+1]; + var layerInfo = currentCompositionData.comp.layers[currentLayerNum+1]; layerInfo.replaceSource(source, false); }
diff --git a/parser/ShapesParser.js b/parser/ShapesParser.js index b8f2bd7..9be185a 100644 --- a/parser/ShapesParser.js +++ b/parser/ShapesParser.js
@@ -253,7 +253,6 @@ extrasInstance.convertToBezierValues(prop.property('Opacity'), frameRate, ob,'o'); extrasInstance.convertToBezierValues(prop.property('Stroke Width'), frameRate, ob,'w'); var j, jLen = prop.property('Dashes').numProperties; - extrasInstance.iterateProperty(prop.property('Dashes').property(1)); var dashesData = []; var changed = false; for(j=0;j<jLen;j+=1){
diff --git a/parser/UI.js b/parser/UI.js index 92eae11..4ac290a 100644 --- a/parser/UI.js +++ b/parser/UI.js
@@ -10,7 +10,7 @@ compsColumns : {name:'Name',queue:'In Queue',destination:'Destination Path'}, imagesButtons : {refresh:'Refresh', exportTxt:'Export', notExportTxt:'Do not export'}, imagesColumns : {name:'Name',exportTxt:'Export'}, - renderTexts : {cancel:'Cancel Render',start:'Starting export',duplicating:'Duplicating Comp: ',processing:'Processing layers'} + renderTexts : {cancel:'Cancel Render',start:'Starting export',duplicating:'Duplicating Comp: ',processing:'Processing layers',sourcing:'Changing sources'} }; var availableCompositions = []; var bodyMovinPanel; @@ -468,6 +468,9 @@ case 'processing': bodyMovinPanel.mainGroup.renderGroup.componentText.text = UITextsData.renderTexts.processing; break; + case 'sourcing': + bodyMovinPanel.mainGroup.renderGroup.componentText.text = UITextsData.renderTexts.sourcing; + break; default: bodyMovinPanel.mainGroup.renderGroup.componentText.text = 'default: '+state; break;
diff --git a/player/index.html b/player/index.html index 004c0ba..166bae6 100644 --- a/player/index.html +++ b/player/index.html
@@ -36,6 +36,6 @@ <!-- endbuild --> </head> <body style="background-color:#666; margin: 0px;height: 100%; font-family: sans-serif;font-size: 10px"> -<div style="width:100%;height:100%;background-color:#000;display:inline-block" class="bodymovin" data-bm-path="exports/multicomp" data-bm-type="canvas" data-bm-loop="true" data-bm-prerender="true"></div> +<div style="width:100%;height:100%;background-color:#000;display:inline-block" class="bodymovin" data-bm-path="exports/letters/full" data-bm-type="canvas" data-bm-loop="true" data-bm-prerender="true"></div> </body> </html>