2013-11-01 28 views
1

我正在編寫generator插件,我使用方法generator.getDocumentInfo()獲得文檔結構。它返回document對象,其中包含layer樹形結構中的對象。 document對象有財產document.id,每層都有財產layer.id如何按ID隱藏圖層?

目標:我想隱藏圖層 - 我只知道文檔ID和圖層ID。

問題:我發現的唯一隱藏發電機插件層的方法是evaluateJSXString()方法。這很好,但我不知道如何通過id訪問文檔和按層訪問。根據http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/photoshop/pdfs/photoshop-cc-javascript-ref.pdf文件沒有id屬性和圖層也沒有id屬性。我發現的所有內容都是app.documents是一組文檔(但索引不是id),app.document[i].layers是一個圖層數組,但它只包含頂層圖層,而每個頂層圖層都包含子圖層。

我看到的唯一選擇是編寫腳本JSX將首先遍歷數組app.documents找到與例如匹配的文件名,然後將搜索document.layers樹結構中的一層DOC ..

  1. 是還有其他的選擇嗎?
  2. 生成器如何在使用generator.getDocumentInfo()時提供文檔和圖層ID?是一些基因內部的記號?
+0

您可能能夠使用activeLayer或app.activeDocument.artLayers.getByName( 「myLayerName」);而不是遍歷所有圖層,順便說一句,當選擇多個圖層時,activeLayer不會返回任何有用的內容。 –

+0

不幸的是,許多圖層可能會有相同的名稱... – user606521

+0

呃,通過id它是那麼!除非你強制用戶創建一個獨特的名稱:) –

回答

1

我看到這是一個老問題有同樣的問題。我能夠使用generator的方法evaluateJSXString想出一個解決方案。您可以在生成器插件中使用evaluateJSXString執行extensionscript。這裏沒有涉及循環。只需通過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);