Я совершенно новичок в CS5, но думаю, что могу объяснить, как это работает. Примеры кода могут быть не самым эффективным способом сделать это, но это делает трюк.
Существует большая разница между Группой слоев или самим отдельным слоем. Все слои и группы упорядочены в формате DOM. Чтобы получить свой корень, вы можете использовать глобальный экземпляр app
для получения активного документа: app.activeDocument
.
Беспокойная часть состоит в том, что для отдельных слоев и групп имеются два отдельных массива. Чтобы получить массив одиночных слоев, используйте app.activeDocument.layers
и app.activeDocument.layerSets
для групп.
Чтобы углубиться в иерархичность, используйте массив layerSets для итерации вниз.
Например, предположим следующее hieralcy:
-Border
+Icons
+Left
-Star
-Home
+Right
-Add
-Remove
Здесь Border
, Star
, Home
, Add
и Remove
все одиночные слои, а Icons
, Left
и Right
являются группы.
Для включения группы Left
мы должны перебирать вниз Icon
группу:
Icons = app.activeDocument.layerSets.getByName("Icons");
Left = Icons.layerSets.getByName("Left");
Left.visible = true;
Если вы покажете слой/группу в CS5, щелкнув мышью, все родительские группы автоматически будут отображаться слишком. По сценариям это не так, вы должны включить всех родителей.
Icons = app.activeDocument.layerSets.getByName("Icons");
Icons.visible = true;
Left = Icons.layerSets.getByName("Left");
Left.visible = true;
Чтобы показать слой границы, вам нужно использовать массив слоев.
app.activeDocument.layers.getByName("Border").visible = true;
Аналогичные вещи применяются, если вы хотите показать слой Add.
Icons = app.activeDocument.layerSets.getByName("Icons");
Icons.visible = true;
Right = Icons.layerSets.getByName("Right");
Right.visible = true;
AddLayer = Right.layers.getByName("Add");
AddLayer.visible = true;
Это может быть немного грязно, если у вас много групп и слоев. Я создал функцию, которая следует за предоставленным путем, чтобы получить конечный объект. Он сам определит, является ли это слоем или группой.
//******************************************
// GET BY PATH
// Author: Max Kielland
//
// Gets the LayerSet or Layer at the path's end.
// Example path "Icons/left" will return the LayerSet object "Left"
// while "Icons/left/Star" will return the Layer object "Star"
// If fSetPath is true, all the parents will be visible as well.
function GetByPath(fPath,fSetPath) {
var lGroup = null;
var lPathArray = new Array();
lPathArray = fPath.split('/');
try {
lGroup = app.activeDocument.layers.getByName(lPathArray[0]);
} catch (err) {
lGroup = app.activeDocument.layerSets.getByName(lPathArray[0]);
}
if (fSetPath)
lGroup.visible = true;
for (n=1; n<lPathArray.length; n++) {
try {
lGroup = lGroup.layerSets.getByName(lPathArray[n]);
} catch(err) {
lGroup = lGroup.layers.getByName(lPathArray[n]);
}
if (fSetPath == true)
lGroup.visible = true;
}
return lGroup;
}
... и одна функция просто устанавливает или очищает группу или слой по ее пути.
//******************************************
// SET STATUS
// Author: Max Kielland
//
// Sets the Group or Layer's visible property
// at the end of the path to fStatus.
function SetStatus(fPath, fStatus) {
Obj = GetByPath(fPath,false);
Obj.visible = fStatus;
}
.. и, наконец, я написал эту функцию, чтобы скрыть все группы и/или слои от указанного пользователем root.
/******************************************
// CLEAR GROUP
// Author: Max Kielland
//
// Clears the visible property in a single
// group/layer with the option to clear all
// its children as well (fRecurs = true).
// fLayerSet can be a layerSet object or a
// String path.
function ClearGroup(fLayerSet,fRecurs) {
var n;
var TargetGroup;
// Get LayerSet Object if reference is a string.
if (typeof fLayerSet == "string")
TargetGroup = GetByPath(fLayerSet);
else
TargetGroup = fLayerSet;
// Iterate through all LayerSets
for (n=0; n<TargetGroup.layerSets.length; n++) {
if (fRecurs == true)
ClearGroup(TargetGroup.layerSets[n],true);
else
TargetGroup.layerSets[n].visible = false;
}
// Iterate through all layers
for (n=0; n<TargetGroup.layers.length; n++) {
TargetGroup.layers[n].visible = false;
}
// Clear self
TargetGroup.visible = false;
}
Вот пример того, как использовать функции
// Hide group "Icon" and its children
ClearGroup("Icons",true);
//Show the layer "Home"
GetByPath("Icons/Left/Home",true);
// To just get the object "Right"
var MyGroup = GetByPath("Icons/Right");
// Save the current document as a PNG file
app.activeDocument.saveAs(File("Scripted Document.png"),PNGSaveOptions);
Я надеюсь, что это полезно для кого-то больше, чем просто я :)
Посмотрите на этот ответ: HTTP://stackoverflow.com/a/8544923/327466 – KatieK