如何通过id隐藏图层?

时间:2013-11-01 16:18:38

标签: adobe photoshop extendscript photoshop-script jsx

我正在编写generator插件,我使用方法generator.getDocumentInfo()获取文档结构。它返回树结构中包含document个对象的layer对象。 document对象具有属性document.id,每个图层都有属性layer.id

目标:我想隐藏图层 - 我只知道文档ID和图层ID。

问题:在我发现的生成器插件中隐藏图层的唯一方法是evaluateJSXString()方法。这很好,但我不知道如何通过id访问id和layer。根据{{​​3}}文档没有id属性,图层也没有id属性。我发现app.documents是一个文档数组(但索引不是id),app.document[i].layers是一个图层数组,但它只包含顶层图层,每个顶层图层包含子图层。< / p>

我看到的唯一选择是编写JSX脚本,它将首先遍历app.documents数组以找到具有匹配文件名的doc,然后它将在document.layers树结构中搜索一个层。

  1. 还有其他选择吗?
  2. 使用generator.getDocumentInfo()时,生成器如何提供文档和图层ID?是一些generatpr内部符号吗?

1 个答案:

答案 0 :(得分:1)

我认为这是一个老问题有同样的问题。我能够使用生成器的方法evaluateJSXString来提出解决方案。您可以在生成器插件中使用evaluateJSXString执行extendscript。这里没有涉及循环。只需layerID

注意:layerID是一个保存图层ID的变量,它与要评估的字符串连接。

显示图层:

  var changeVisibilityString = " var ref = new ActionReference(); \
                                  ref.putIdentifier(charIDToTypeID('Lyr '), " + layerID + " ); \
                                  var desc = new ActionDescriptor(); \
                                  desc.putReference(charIDToTypeID('null'), ref); \
                                  desc.putBoolean(charIDToTypeID('MkVs'), false); \
                                  executeAction( charIDToTypeID('Shw '), desc);"

    generator.evaluateJSXString(changeVisibilityString);

隐藏图层:

  var changeVisibilityString = " var ref = new ActionReference(); \
                                  ref.putIdentifier(charIDToTypeID('Lyr '), " + layerID + " ); \
                                  var desc = new ActionDescriptor(); \
                                  desc.putReference(charIDToTypeID('null'), ref); \
                                  desc.putBoolean(charIDToTypeID('MkVs'), false); \
                                  executeAction( charIDToTypeID('Hd  '), desc);"

    generator.evaluateJSXString(changeVisibilityString);