home *** CD-ROM | disk | FTP | other *** search
/ PC Advisor 2006 January / PCA126_DVD.iso / TRIAL / MacromediaStudio / Flash8-en.exe / Data1.cab / _5EAB883B9F86407F900EDE41FB4458A8 < prev    next >
Encoding:
Text File  |  2005-07-12  |  13.7 KB  |  467 lines

  1. /**
  2.  * Configure the effect. Create any necessary shared functions.
  3.  */
  4. function configureEffect()
  5. {
  6.     // Load shared functions
  7.     // The runScript path is relative to the Commands directory.
  8.     // shared.jsfl is in the Effects directory
  9. }
  10.  
  11. /**
  12.  * Calls reverse()
  13.  */
  14. function removeEffect()
  15. {
  16. //    fl.outputPanel.clear();
  17. //    Object.fxutil.myTrace(0, "RemoveEffect()");
  18.     reverse();
  19. }
  20.  
  21.  
  22. /**
  23.  * Performs the operations necessary to remove the effect
  24.  */
  25. function reverse()
  26. {
  27.     try
  28.     {
  29.         fl.runScript(fl.configURI + "Effects/shared.jsfl");
  30.         Object.fxutil.myTrace(0, "Expand.reverse()");
  31.         
  32.         // save the selected state
  33.         var theEffectObj = fl.getDocumentDOM().selection[0];    
  34.         var tmpTL    = fl.getDocumentDOM().getTimeline();
  35.         var tmpLayer = tmpTL.layers[ tmpTL.currentLayer ];
  36.         var tmpFrame = tmpLayer.frames[ tmpTL.currentFrame ];
  37.         var theCurrentFrameNum = tmpFrame.startFrame;
  38.         var theCurrentLayer = tmpTL.currentLayer;
  39.  
  40.         //enter edit mode of the selected item
  41.         fl.getDocumentDOM().enterEditMode("inPlace");
  42.         
  43.         var local_tl = fl.getDocumentDOM().getTimeline();
  44.         var numLayer = local_tl.layers.length - 1;
  45.         
  46.         //remove all layers except for Saved layer
  47.         for (var i = 0; i < numLayer; i++)
  48.             local_tl.deleteLayer(0);
  49.  
  50.         local_tl.setLayerProperty("visible", true);
  51.         local_tl.setLayerProperty("layerType", "normal");
  52.         local_tl.setLayerProperty("locked", false);
  53.         
  54.         //bring current view back to main stage
  55.         fl.getDocumentDOM().exitEditMode();
  56.         
  57.         //remove the frames added on the main timeline
  58.         var main_tl = fl.getDocumentDOM().getTimeline();
  59.         var selectedFrames = main_tl.getSelectedFrames();
  60.         var removeStart = selectedFrames[1];
  61.         var removeEnd   = selectedFrames[2];
  62.         main_tl.removeFrames(selectedFrames[1]+1, selectedFrames[2]);
  63.         main_tl.setSelectedFrames(selectedFrames[1], selectedFrames[1]+1);
  64.         
  65.         // reset the selection
  66.         Object.fxutil.resetSelection( theEffectObj, theCurrentFrameNum,  theCurrentLayer );
  67.     }
  68.     catch (e)
  69.     {
  70.         fl.trace("Exception in reverse: " + e);
  71.     }
  72. }
  73.  
  74. //save the original graphics or text to use for removeEffect later
  75. function saveOriginal()
  76. {
  77.     try
  78.     {
  79.         var save_tl = fl.getDocumentDOM().getTimeline();
  80.  
  81.         //add a new layer named "Saved", type guide, below the current layer
  82.         save_tl.addNewLayer("Saved x=", "guide", false);
  83.         save_tl.currentLayer = 0;        
  84.         fl.getDocumentDOM().selectAll();
  85.         fl.getDocumentDOM().clipCopy();
  86.         fl.getDocumentDOM().selectNone();
  87.         save_tl.setSelectedFrames([1,0,1], true);
  88.         fl.getDocumentDOM().clipPaste(true);
  89.         save_tl.setLayerProperty("visible", false);
  90.         save_tl.setLayerProperty("locked", true);
  91.     }
  92.     catch (e)
  93.     {
  94.         fl.trace("Exception in saveOriginal: " + e);
  95.     }
  96. }
  97.  
  98. //removed extra frames and keyframes added by other expanded action
  99. function cleanUpSaveLayer(outDur, inDur){
  100.     var cur_tl = fl.getDocumentDOM().getTimeline();
  101.     cur_tl.setSelectedLayers(cur_tl.layers.length-1, true);
  102.     cur_tl.removeFrames(1, outDur+inDur+1);
  103. }
  104.  
  105.  
  106. //expand the selected object from right to left from index
  107. function toLeftExpand(index, dur, x, y, wid, hei, inputSpace)
  108. {
  109.     try
  110.     {
  111.         doAlert( "toLeftExpand, layer: " + index );
  112.     
  113.         var cur_tl = fl.getDocumentDOM().getTimeline();
  114.         var leftSpace = inputSpace*(-1);
  115.         var inc   = 1;
  116.         var curSelect = new Array();
  117.         var firstFrame;
  118.         var xScale = 0;
  119.         var yScale = y;
  120.         var firstRound = true;
  121.  
  122.         for (var i=index; i>=0; i--)
  123.         {
  124.             doAlert( "next left tween, layer: " + i );
  125.                 cur_tl.currentLayer = i;
  126.                 cur_tl.setSelectedFrames(dur, dur+1, true);
  127.                 fl.getDocumentDOM().selectNone();
  128.                 doAlert( "after selectNone" );
  129.                 
  130.                 curSelect[0] = cur_tl.layers[i].frames[dur].elements[0];    
  131.                 curSelect[0].width += (wid*inc);
  132.                 curSelect[0].height += (hei*inc);
  133.                 //cur_tl.layers[i].frames[dur].elements[0] = curSelect;
  134.                 fl.getDocumentDOM().selection = curSelect;
  135.                 doAlert( "after set selection" );
  136.                 
  137.                 xScale = (leftSpace*inc) + (x);
  138.                 fl.getDocumentDOM().moveSelectionBy({x:xScale, y:yScale});
  139.                 leftSpace -= arguments[6];
  140.                 inc++;
  141.                 firstFrame = dur-dur;
  142.                 cur_tl.setSelectedFrames(firstFrame, firstFrame+1, true);
  143.                 cur_tl.setFrameProperty("tweenType", "motion");
  144.                 
  145.             doAlert( "tween created" );
  146.         }
  147.     }
  148.     catch (e)
  149.     {
  150.         fl.trace("Exception in toLeftExpand: " + e);
  151.     }
  152. }
  153.  
  154. //expand the selected object from left to right from index
  155. function toRightExpand(index, dur, xPos, yPos, wid, hei, inputSpace)
  156. {
  157.     try
  158.     {
  159.         doAlert( "toRightExpand, layer: " + index );
  160.         
  161.         var cur_tl = fl.getDocumentDOM().getTimeline();
  162.         var rightSpace = inputSpace;
  163.         var inc = 1;
  164.         var curSelect = new Array();
  165.         var firstFrame;
  166.         var xScale = 0;
  167.         var yScale = yPos;
  168.         var firstRound = true;
  169.  
  170.         for (var i=index; i<cur_tl.layers.length-1; i++) 
  171.         {
  172.             doAlert( "next right tween, layer: " + i );
  173.                 
  174.                 cur_tl.currentLayer = i;
  175.                 cur_tl.setSelectedFrames(dur, dur+1, true);
  176.                 fl.getDocumentDOM().selectNone();
  177.                 
  178.                 curSelect[0] = cur_tl.layers[i].frames[dur].elements[0];
  179.                 curSelect[0].width += (wid*inc);
  180.                 curSelect[0].height += (hei*inc);
  181.                 cur_tl.layers[i].frames[dur].elements[0] = curSelect[0];
  182.                 fl.getDocumentDOM().selection = curSelect;
  183.                 
  184.                 xScale = (rightSpace*inc) + xPos;            
  185.                 fl.getDocumentDOM().moveSelectionBy({x:xScale, y:yScale});
  186.                 rightSpace += inputSpace;
  187.                 
  188.                 inc++;
  189.                 firstFrame = 0;
  190.                 cur_tl.setSelectedFrames(firstFrame, firstFrame+1, true);
  191.                 cur_tl.setFrameProperty("tweenType", "motion");
  192.             
  193.             doAlert( "right tween created" );
  194.         }    
  195.     }
  196.     catch (e)
  197.     {
  198.         fl.trace("Exception in toRightExpand: " + e);
  199.     }
  200. }
  201.  
  202. //move the selected object back in the original position 
  203. function squeeze(odur, idur)
  204. {
  205.     try
  206.     {
  207.         var cur_tl = fl.getDocumentDOM().getTimeline();
  208.         var firstFrame = arguments[0];
  209.         
  210.         //inserts duration for inward direction to all layers
  211.         cur_tl.insertFrames(arguments[1], true, arguments[0]-1); 
  212.             
  213.         // select everything
  214.         cur_tl.selectAllFrames();
  215.         
  216.         //inserts 1 keyframe to the end of the duration on all layers
  217.         cur_tl.currentFrame = arguments[1] + arguments[0];
  218.         cur_tl.insertKeyframe();
  219.  
  220.         for (var i=0; i<cur_tl.layers.length-1; i++) {
  221.             cur_tl.currentLayer = i;
  222.             cur_tl.setSelectedFrames(firstFrame, firstFrame+1, true);
  223.             cur_tl.setFrameProperty("tweenType", "motion");
  224.         }    
  225.     }
  226.     catch (e)
  227.     {
  228.         fl.trace("Exception in squeeze: " + e);
  229.     }
  230. }
  231.  
  232. //move the layer that contains the object on the left to the top
  233. function reorderAllLayers()
  234. {
  235.     try
  236.     {
  237.         var cur_tl = fl.getDocumentDOM().getTimeline();
  238.         var nextLayer;
  239.         var correctOrder = checkLayerOrder();
  240.  
  241.         while(!correctOrder) {
  242.             nextLayer = 0;
  243.             for (var i=0; i<cur_tl.layers.length-1; i++) {
  244.                 nextLayer++;
  245.                 if(nextLayer < cur_tl.layers.length-1) {
  246.                     if (cur_tl.layers[i].frames[0].elements[0].left > cur_tl.layers[nextLayer].frames[0].elements[0].left) {
  247.                         cur_tl.reorderLayer(nextLayer, i);
  248.                     }
  249.                 }
  250.             }
  251.  
  252.             correctOrder = checkLayerOrder();
  253.         }
  254.     }
  255.     catch (e)
  256.     {
  257.         fl.trace("Exception in reorderAllLayers: " + e);
  258.     }
  259. }
  260.  
  261. //check all the object in each layer return true if the left side of the object on the top layer is larger than the left side of the object on the bottom layer
  262.  
  263. function checkLayerOrder()
  264. {
  265.     var success = true;
  266.     try
  267.     {
  268.         var cur_tl = fl.getDocumentDOM().getTimeline();
  269.         for (var j=0; j<cur_tl.layers.length-2; j++) {
  270.             if (cur_tl.layers[j].frames[0].elements[0].left > cur_tl.layers[j+1].frames[0].elements[0].left) {
  271.                 success = false;
  272.                 j=cur_tl.layers.length;
  273.             }
  274.         }
  275.     }
  276.     catch (e)
  277.     {
  278.         fl.trace("Exception in checkLayerOrder: " + e);
  279.     }
  280.     return success;
  281. }
  282.  
  283. /**
  284.  * Perform the effect. 
  285.  */
  286. function executeEffect()
  287. {
  288.     var ef = fl.activeEffect;
  289.     forward( false, ef.outDur, ef.inDur, ef.direction, ef.space, ef.xScale, ef.yScale, ef.wid, ef.hei)
  290. }
  291.  
  292.  
  293.  
  294.  
  295.  
  296. /**
  297. * Implementation of the  effect. This could be called from
  298. * the effect file or from the preview.
  299. *
  300. *      @param preview Boolean: True to create a preview swf.
  301. *      <property name="Expand Duration" variable="outDur" min="1" defaultValue="20" type="Number" />        
  302. *      <property name="Squeeze Duration" variable="inDur" min="0" defaultValue="0" type="Number" />        
  303. *      <property name="Expand Direction" variable="direction" list="From Center,To Left,To Right" defaultValue="0" type="Strings" />
  304. *      <property name="Expand Spacing" variable="space" defaultValue="20" type="Number" />
  305. *      <property name="Shift Horizontal by" variable="xScale" defaultValue="0" type="Number" />
  306. *      <property name="Shift Vertical by" variable="yScale" defaultValue="0" type="Number" />
  307. *      <property name="Extend Width by" variable="wid" defaultValue="0" type="Number" />
  308. *      <property name="Extend Height by" variable="hei" defaultValue="0" type="Number" />
  309. */
  310. function forward(preview, outDur, inDur, direction, space, xScale, yScale, wid, hei)
  311. {
  312.     try
  313.     {
  314.         doAlert("forward, outDur: " + outDur + ", inDur: " + inDur);
  315.     
  316.         fl.runScript(fl.configURI + "Effects/shared.jsfl");
  317.         Object.fxutil.myTrace(0, "Expand.forward()");
  318.         traceParameters(preview, outDur, inDur, direction, space, xScale, yScale, wid, hei);
  319.  
  320.         try
  321.         {
  322.             fl.enableImmediateUpdates( true );
  323.             fl.runScript(fl.configURI + "Effects/shared.jsfl");
  324.                 
  325.             //var ef = fl.activeEffect;    
  326.             var curFrame = fl.getDocumentDOM().getTimeline().currentFrame;
  327.             
  328.             // save the selected state
  329.             var theEffectObj = fl.getDocumentDOM().selection[0];
  330.             var tmpTL    = fl.getDocumentDOM().getTimeline();
  331.             var tmpLayer = tmpTL.layers[ tmpTL.currentLayer ];
  332.             var tmpFrame = tmpLayer.frames[ tmpTL.currentFrame ];
  333.             var theCurrentFrameNum = tmpFrame.startFrame;
  334.             var theCurrentLayer = tmpTL.currentLayer;
  335.  
  336.             var effectSymbolName = theEffectObj.libraryItem.name;
  337.             
  338.             //create a folder in the library, stores all effects graphics in there
  339.             var cur_lib = fl.getDocumentDOM().library;
  340.             var curItemName = fl.getDocumentDOM().selection[0].libraryItem.name;
  341.             var libFolderName = Object.fxutil.getEffectsFolderName();
  342.  
  343.             //insert out duration + in duration frames on the main timeline, on current layer
  344.             var nToInsert = inDur + outDur - 1;
  345.             if (nToInsert > 0)
  346.                 fl.getDocumentDOM().getTimeline().insertFrames(nToInsert, false);
  347.             
  348.             // select the frames
  349.             Object.fxutil.resetSelection( theEffectObj,  theCurrentFrameNum,  theCurrentLayer);
  350.             
  351.             //enters edit Symbol mode for selected object created by Effect
  352.             fl.getDocumentDOM().enterEditMode("inPlace");
  353.             doAlert( "edit in place" ); 
  354.             
  355.             // get the timeline for this symbol
  356.             var main_tl = fl.getDocumentDOM().getTimeline();
  357.             
  358.             //save original graphics or text to a guide layer, set the guide layer to invisible and locked
  359.             saveOriginal();
  360.             fl.getDocumentDOM().selectAll();
  361.             var sel = fl.getDocumentDOM().selection;
  362.  
  363.             //breakapart the selected object if it is text
  364.             if ((sel.length == 1) && (sel[0].elementType == "text") && (sel[0].length > 1)) 
  365.                 fl.getDocumentDOM().breakApart();    
  366.             
  367.             // distribute everything to it's own layer
  368.             fl.getDocumentDOM().distributeToLayers();
  369.             doAlert( "after distributeToLayers" );
  370.  
  371.             //delete the default layer on the top
  372.             main_tl.setSelectedLayers(0, true);
  373.             main_tl.deleteLayer();
  374.             
  375.             //reorder all layers so that the left most object is on the top layer
  376.             reorderAllLayers();
  377.             
  378.             //inserts duration-1 for outward direction to all layers
  379.             main_tl.insertFrames(outDur-1, true);
  380.             
  381.             // select everything
  382.             main_tl.selectAllFrames();
  383.             doAlert("after insertFrames" );
  384.             
  385.             //inserts 1 keyframe to the end of the duration on all layers
  386.             main_tl.currentFrame = outDur;
  387.             main_tl.insertKeyframe();
  388.  
  389.             if (inDur > 0)
  390.             {
  391.                 doAlert("** squeeeeeze: " + outDur + ", " + inDur); 
  392.                 squeeze(outDur, inDur);
  393.             }
  394.         
  395.             switch(direction) {
  396.                 case "From Center":
  397.                     var midIndex = Math.floor((main_tl.layers.length-2)/2);
  398.                     toLeftExpand(midIndex, outDur-1, xScale, yScale, wid, hei, space);
  399.                     toRightExpand(midIndex+1, outDur-1, xScale, yScale, wid, hei, space);
  400.                     break;
  401.  
  402.                 case "To Left":
  403.                     toLeftExpand(main_tl.layers.length-2, outDur-1, xScale, yScale, wid, hei, space);
  404.                     break;
  405.  
  406.                 case "To Right":
  407.                     toRightExpand(0, outDur-1, xScale, yScale, wid, hei, space);
  408.                     break;
  409.             }
  410.             doAlert( "after create tweens" );
  411.             
  412.             //clean up the extra keyframes and frames added in saved layer
  413.             cleanUpSaveLayer(outDur, inDur);
  414.             
  415.             //bring the current view back to the main stage
  416.             doAlert( "about to exit" );
  417.             fl.getDocumentDOM().exitEditMode();
  418.             
  419.             // return to the start frame
  420.             fl.getDocumentDOM().getTimeline().currentFrame = curFrame;
  421.             
  422.             //move playhead back to original location
  423.             fl.getDocumentDOM().getTimeline().currentFrame = curFrame;
  424.         
  425.             // reset the selection
  426.             Object.fxutil.resetSelection( theEffectObj, theCurrentFrameNum,  theCurrentLayer );
  427.             
  428.             if (preview)
  429.             {
  430.                 // Export the preview swf
  431.                 Object.fxutil.exportPreviewSWF( fl.getDocumentDOM().selection[0] );
  432.             }
  433.  
  434.         
  435.         
  436.         } catch (e) {
  437.             alert(e);
  438.         }
  439.     }
  440.     catch (e)
  441.     {
  442.         fl.trace("Exception in forward: " + e);
  443.     }
  444. }
  445.  
  446.  
  447.  
  448.  
  449. function doAlert( str )
  450. {
  451.     //alert( str );
  452. }
  453.  
  454.  
  455. function traceParameters(preview, outDur, inDur, direction, space, xScale, yScale, wid, hei)
  456. {
  457.     Object.fxutil.myTrace(1, "Expand Parameters:");
  458.     Object.fxutil.myTrace(2, "preview=" + preview);
  459.     Object.fxutil.myTrace(2, "outDur=" + outDur);
  460.     Object.fxutil.myTrace(2, "inDur=" + inDur);
  461.     Object.fxutil.myTrace(2, "direction=" + direction);
  462.     Object.fxutil.myTrace(2, "space=" + space);
  463.     Object.fxutil.myTrace(2, "xScale=" + xScale);
  464.     Object.fxutil.myTrace(2, "yScale=" + yScale);
  465.     Object.fxutil.myTrace(2, "wid=" + wid);
  466.     Object.fxutil.myTrace(2, "hei=" + hei);
  467. }
  468.