2013-11-01 3 views
1

Я пишу generator плагин и получаю структуру документа используя метод generator.getDocumentInfo(). Он возвращает document объект, содержащий layer объектов в древовидной структуре. document объект имеет свойство document.id, и каждый слой имеет свойство layer.id.Как скрыть слой по id?

Цель: я хочу скрыть слой - я знаю только идентификатор документа и идентификатор слоя.

Проблема: Единственный способ скрыть слой в плагине генератора, который я нашел, - это метод evaluateJSXString(). Это нормально, но я не знаю, как получить доступ к документу по id и layer по 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 ..

  1. ли есть ли другие варианты?
  2. Как генератор предоставляет идентификаторы документов и слоев при использовании generator.getDocumentInfo()? Является ли какая-то generatpr-внутренняя запись?
+0

Вы можете быть в состоянии использовать activeLayer или app.activeDocument.artLayers.getByName ("myLayerName"); Вместо того, чтобы перемещаться по всем слоям, в противном случае activeLayer не возвращает ничего полезного при выборе нескольких слоев. –

+0

К сожалению, многие слои могут иметь одно и то же имя ... – user606521

+0

Ugh, по id это тогда! Если вы не заставите пользователя создать уникальное имя :) –

ответ

1

Я вижу, что это старый вопрос, имеющий тот же вопрос. Я смог придумать решение, используя метод генератора jSXString. Вы можете выполнить extendscript с помощью метода оценкиJSXString в своем плагине генератора. Здесь нет циклов. Просто с помощью layerID.

Примечание: layerID - это переменная, которая содержит идентификатор уровня, и она конкатенируется с строкой, подлежащей оценке.

Чтобы показать слой:

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); 
Смежные вопросы