我正在尝试制作一个动作管理器功能来选择图层。这可以通过使用 dom 来完成,但我想弄清楚为什么它不起作用。好吧..当所有图层和图层集具有不同的名称时,它就可以工作。但是当有同名的层时,它只选择它找到的第一个。但是.. 在从 scriptlistener 记录的 AM 代码中,使用了一个 layer.id 参数。
我明白为什么我需要一个图层 ID,没有它,它只有图层名称,当有多个同名图层时,这是不够的。但它似乎记录正确,但不能播放。
scriptlistener 显示此 layer.id 更改。但是当我运行侦听器代码时,它会忽略此参数,并且仍然只选择第一个。您可以在其中输入任何值,并且没有任何区别。为什么会这样?似乎在其他 AM 代码中,一些变量只是没有整体使用。
var idslct = charIDToTypeID( "slct" );
var desc34 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref13 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
ref13.putName( idLyr, "Group 4" );
desc34.putReference( idnull, ref13 );
var idMkVs = charIDToTypeID( "MkVs" );
desc34.putBoolean( idMkVs, false );
var idLyrI = charIDToTypeID( "LyrI" );
var list5 = new ActionList();
list5.putInteger( 4 );
desc34.putList( idLyrI, list5 );
executeAction( idslct, desc34, DialogModes.NO );
var idslct = charIDToTypeID( "slct" );
var desc35 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref14 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
ref14.putName( idLyr, "Group 4" );
desc35.putReference( idnull, ref14 );
var idMkVs = charIDToTypeID( "MkVs" );
desc35.putBoolean( idMkVs, false );
var idLyrI = charIDToTypeID( "LyrI" );
var list6 = new ActionList();
list6.putInteger( 6 );
desc35.putList( idLyrI, list6 );
executeAction( idslct, desc35, DialogModes.NO );
var idslct = charIDToTypeID( "slct" );
var desc36 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref15 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
ref15.putName( idLyr, "Group 4" );
desc36.putReference( idnull, ref15 );
var idMkVs = charIDToTypeID( "MkVs" );
desc36.putBoolean( idMkVs, false );
var idLyrI = charIDToTypeID( "LyrI" );
var list7 = new ActionList();
list7.putInteger( 8 );
desc36.putList( idLyrI, list7 );
executeAction( idslct, desc36, DialogModes.NO );
上面的代码“应该”选择 3 个 layerSets,全部命名为“Group 4”。ID被正确记录,4、6和8。但它只会选择一个相同的layerSet 3次。您可以使用脚本来检查 id 匹配,并使用圆顶选择正确的图层,但我喜欢理解 ;)
欢迎任何建议!