gpt4 book ai didi

javascript - 如何使用 Action 管理器获取图层的数据,排除具有特定图层集的图层?

转载 作者:行者123 更新时间:2023-12-02 22:50:43 24 4
gpt4 key购买 nike

我制作了这个函数,以便获得每个图层数据,并具有斜 Angular 和浮雕效果,在一个文档。现在,我正在寻找一种方法来执行相同操作,但排除特定组 (layerSet)。

function getLayersData()
{
var lyrs = [];
var layers = 1;
while (true)
{
ref = new ActionReference();
ref.putIndex(charIDToTypeID('Lyr '), layers);
try
{
var d1 = executeActionGet(ref);
var d2 = executeActionGet(ref);
var d3 = executeActionGet(ref);
var d4 = executeActionGet(ref);
}
catch (err)
{
break;
};
var c2t = function (s){return app.charIDToTypeID(s);};
var s2t = function (s){return app.stringIDToTypeID(s);};
var lyr = {};
lyr.type = d1.getInteger(s2t("layerKind"));
lyr.name = d1.getString(c2t("Nm "));
lyr.id = d1.getInteger(s2t("layerID"));
if (checkbox1.value == true)
{
ref.putEnumerated( c2t("Lyr "), c2t("Ordn"), c2t("Trgt") );
if (d1.hasKey(s2t('layerEffects')))
{
d1 = d1.getObjectValue(s2t('layerEffects'));
if (d1.hasKey(s2t('bevelEmboss')))
{
d1 = d1.getObjectValue(s2t('bevelEmboss'));
// etc
d2 = d1.getObjectValue(s2t('highlightColor'));
// etc
d3 = d1.getObjectValue(s2t('shadowColor'));
// etc
d4 = d1.getObjectValue(c2t('TrnS'));
// etc
lyrs.push(lyr);
};
};
}
else
{
lyrs.push(lyr);
};
layers++;
};
return lyrs;
};

例如,假设我们有五个组,名称分别为 Group1、2、3、4 和 5。

在每组中,我们有四个同名的向量。 “形状 1”,全部。

我想列出所有这些“形状 1”向量,除了第 5 组中的向量!!!

我找到了将所有组名称列出到另一个函数中的方法。所以我只需要这个函数,即我所展示的函数,来检查每一层的父级名称,以及层是否是要排除的该组的子级!!!

最佳答案

在脚本中使用组是一件痛苦的事情,有些脚本可能会变慢,具体取决于您拥有的组和层的数量,DOM 中没有任何系统或逻辑的顺序可供使用:(

但是,您可以做的是使用递归循环所有层并排除您不想要的层。我拼凑了一个脚本,该脚本将循环遍历所有图层并记录组图层名称并忽略组 5。您应该能够将您想要使用的内容组合在一起。

// group layer vegetables
var allLayers = new Array();

// hold an array that we want to ignore the names of
var excludeLayers = ["Group 5"];


var theLayers = collect_all_layers(app.activeDocument, 0, excludeLayers);

var s = "Groups:\n";
for (var i = 0; i < allLayers.length; i++)
{
s += allLayers[i] + "\n"
}

alert(s);


function do_stuff(alayer)
{
// do stuff!
alert(alayer.name);
}


// function collect all layers
function collect_all_layers (theParent, level, exclude)
{
for (var m = theParent.layers.length - 1; m >= 0; m--)
{


var theLayer = theParent.layers[m];


if (theLayer.typename == "LayerSet")
{
for (i = 0; i< exclude.length; i++)
{
if (theLayer.name == exclude[i])
{
alert ("Found " + exclude[i] + " and ignoring it.");
}
else
{
allLayers.push(theLayer.name);
}
}
}

// apply the function to layersets;
if (theLayer.typename == "ArtLayer")
{
// find the art layers
do_stuff(theLayer)
}
else
{
collect_all_layers(theLayer, level + 1, excludeLayers);
}
}
}

关于javascript - 如何使用 Action 管理器获取图层的数据,排除具有特定图层集的图层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58188500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com