替换JSFL中的填充颜色

问题描述:

我正在尝试编写一个JSFL脚本,它将替换所有与所选框架上的给定颜色相匹配的轮廓填充。替换JSFL中的填充颜色

我的问题是,如果我按照JSFL文档的规定调用shape.beginEdit()和shape.endEdit(),那么只要我访问轮廓上的填充属性(甚至是只读访问),脚本就会崩溃。错误消息是“发生了以下JavaScript错误:”,没有附加信息。

如果我省略shape.begin/endEdit()调用,脚本不会崩溃,但颜色实际上并未更新。

我曾尝试在Flash CS5.5,CS6和CC中运行此脚本,结果相同。

如果有人能指出我缺少的东西,我将不胜感激。

脚本:

var replaceFills = { 
    '#ff0000': '#33cccc', 
    '#33cccc': '#ff0000', 
    '#66ff00': '#00ffff', 
    '#00ffff': '#66ff00', 

    '#2173a6': '#ff00ff', 
    '#ff00ff': '#2173a6', 

    '#195480': '#ff00ff', 
    '#ff00ff': '#195480', 
}; 

function recolor(element) { 
    if (element.elementType == "shape") { 
     element.beginEdit(); 

     for (var j = 0; j < element.contours.length; j++) { 
      var c = element.contours[j]; 
      if (c.interior && c.fill) { 
       if (c.fill.style == 'solid') { 
        if (c.fill.color in replaceFills) { 
         c.fill.color = replaceFills[c.fill.color]; 
        } 
       } 
      } 
     } 
     element.endEdit(); 
    } 
} 

function recolorFrame(frame) { 
    var elements = frame.elements; 
    for (var i = 0; i < elements.length; i++) 
     recolor(elements[i]); 
} 


var curSelected = fl.getDocumentDOM().getTimeline().getSelectedFrames(); 

for (var i = 0; i < curSelected.length; i += 3) { 
    var layerIndex = curSelected[i]; 
    var startIndex = curSelected[i + 1]; 
    var endIndex = curSelected[i + 2]; 

    var layer = fl.getDocumentDOM().getTimeline().layers[layerIndex]; 

    for (var j = startIndex; j < endIndex; j++) { 
     var frame = layer.frames[j]; 
     if (j == frame.startFrame) 
      recolorFrame(frame); 
    } 
} 

编辑侑功能就像这样:

function recolor(element) { 
if (element.elementType == "shape") { 
//del element.beginEdit(); 

    for (var j = 0; j < element.contours.length; j++) { 
     var c = element.contours[j]; 
     if (c.interior && c.fill) { 
      if (c.fill.style == 'solid') { 
       if (c.fill.color in replaceFills) { 
//del     c.fill.color = replaceFills[c.fill.color]; 
//add this 
         var fill = element.getCustomFill(); 
         fill.style = "solid"; 
         fill.color = replaceFills[c.fill.color]; 
         element.setCustomFill(fill); 
//end 
        } 
       } 
      } 
     } 
//del element.endEdit(); 
    } 
    } 

FWIW,还可以替代使用Find & Replace面板位于Edit下的色彩。