从多层应用的斜角和浮雕效果中获取值?
Get values from an applied bevel and emboss effect for multiple layers?
我在下面创建了这个函数,以从应用的斜角和浮雕效果[=22]中获取一些值=],如遮光角度,遮光高度等
alert("Angle: " + getBevelAndEmbossValues()[0] + "\nAltitude: " + getBevelAndEmbossValues()[1]);
function getBevelAndEmbossValues()
{
try
{
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var desc = executeActionGet(ref).getObjectValue(stringIDToTypeID('layerEffects')).getObjectValue(stringIDToTypeID('bevelEmboss'));
return [desc.getUnitDoubleValue(stringIDToTypeID('localLightingAngle')),
desc.getUnitDoubleValue(stringIDToTypeID('localLightingAltitude'))];
}
catch(e)
{
alert(e);
}
};
我现在想做的是做同样的事情,但 多层 。就像下面这个函数对图层颜色的处理一样。我尝试了几件事,但我的知识水平没有帮助。有什么想法吗?
function getLayersData()
{
var lyrs = [];
var layers = 1;
while (true)
{
ref = new ActionReference();
ref.putIndex(charIDToTypeID('Lyr '), layers);
try{var desc = executeActionGet(ref);}catch(err){alert(err);break;};
var lyr = {};
lyr.type = desc.getInteger(stringIDToTypeID("layerKind"));
lyr.name = desc.getString(charIDToTypeID("Nm "));
lyr.id = desc.getInteger(stringIDToTypeID("layerID"));
if (lyr.type == layerType && lyr.name.match(layerName))
{
var adj = desc.getList(stringIDToTypeID("adjustment")).getObjectValue(0);
if (adj.hasKey(stringIDToTypeID("color")))
{
var curColor = new SolidColor();
curColor.rgb.red = adj.getObjectValue(stringIDToTypeID("color")).getUnitDoubleValue(stringIDToTypeID("red"));
curColor.rgb.green = adj.getObjectValue(stringIDToTypeID("color")).getUnitDoubleValue(stringIDToTypeID("grain"));
curColor.rgb.blue = adj.getObjectValue(stringIDToTypeID("color")).getUnitDoubleValue(stringIDToTypeID("blue"));
lyr.color = curColor;
if (lyr.color.rgb.hexValue == currentColor[0])
{
lyrs.push(lyr);
};
};
};
layers++;
};
return lyrs;
};
好吧,我终于设法解决了!!这是我的解决方案...如果有人有更好的...
var layers = getLayersData();
alert (layers.length + ' layers found!!!' , 'Message');
function getLayersData()
{
var lyrs = [];
var layers = 1;
while (true)
{
ref = new ActionReference();
ref.putIndex(charIDToTypeID('Lyr '), layers);
try{var desc = executeActionGet(ref);}catch (err){break;};
var lyr = {};
lyr.type = desc.getInteger(stringIDToTypeID("layerKind"));
lyr.name = desc.getString(charIDToTypeID("Nm "));
lyr.id = desc.getInteger(stringIDToTypeID("layerID"));
if (lyr.type == '4')
{
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
if(desc.hasKey(stringIDToTypeID('layerEffects')))
{
if(desc.getBoolean (stringIDToTypeID('layerFXVisible')))
{
desc = desc.getObjectValue(stringIDToTypeID('layerEffects'));
if(desc.hasKey(stringIDToTypeID('bevelEmboss')))
{
desc = desc.getObjectValue(stringIDToTypeID('bevelEmboss'));
if(desc.hasKey(stringIDToTypeID('localLightingAngle')))
{
var BevelAndEmbossAngle = desc.getUnitDoubleValue(stringIDToTypeID('localLightingAngle'));
if(BevelAndEmbossAngle == '90')
{
lyrs.push(lyr);
}
}
}
}
}
};
layers++;
};
return lyrs;
};
我在下面创建了这个函数,以从应用的斜角和浮雕效果[=22]中获取一些值=],如遮光角度,遮光高度等
alert("Angle: " + getBevelAndEmbossValues()[0] + "\nAltitude: " + getBevelAndEmbossValues()[1]);
function getBevelAndEmbossValues()
{
try
{
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var desc = executeActionGet(ref).getObjectValue(stringIDToTypeID('layerEffects')).getObjectValue(stringIDToTypeID('bevelEmboss'));
return [desc.getUnitDoubleValue(stringIDToTypeID('localLightingAngle')),
desc.getUnitDoubleValue(stringIDToTypeID('localLightingAltitude'))];
}
catch(e)
{
alert(e);
}
};
我现在想做的是做同样的事情,但 多层 。就像下面这个函数对图层颜色的处理一样。我尝试了几件事,但我的知识水平没有帮助。有什么想法吗?
function getLayersData()
{
var lyrs = [];
var layers = 1;
while (true)
{
ref = new ActionReference();
ref.putIndex(charIDToTypeID('Lyr '), layers);
try{var desc = executeActionGet(ref);}catch(err){alert(err);break;};
var lyr = {};
lyr.type = desc.getInteger(stringIDToTypeID("layerKind"));
lyr.name = desc.getString(charIDToTypeID("Nm "));
lyr.id = desc.getInteger(stringIDToTypeID("layerID"));
if (lyr.type == layerType && lyr.name.match(layerName))
{
var adj = desc.getList(stringIDToTypeID("adjustment")).getObjectValue(0);
if (adj.hasKey(stringIDToTypeID("color")))
{
var curColor = new SolidColor();
curColor.rgb.red = adj.getObjectValue(stringIDToTypeID("color")).getUnitDoubleValue(stringIDToTypeID("red"));
curColor.rgb.green = adj.getObjectValue(stringIDToTypeID("color")).getUnitDoubleValue(stringIDToTypeID("grain"));
curColor.rgb.blue = adj.getObjectValue(stringIDToTypeID("color")).getUnitDoubleValue(stringIDToTypeID("blue"));
lyr.color = curColor;
if (lyr.color.rgb.hexValue == currentColor[0])
{
lyrs.push(lyr);
};
};
};
layers++;
};
return lyrs;
};
好吧,我终于设法解决了!!这是我的解决方案...如果有人有更好的...
var layers = getLayersData();
alert (layers.length + ' layers found!!!' , 'Message');
function getLayersData()
{
var lyrs = [];
var layers = 1;
while (true)
{
ref = new ActionReference();
ref.putIndex(charIDToTypeID('Lyr '), layers);
try{var desc = executeActionGet(ref);}catch (err){break;};
var lyr = {};
lyr.type = desc.getInteger(stringIDToTypeID("layerKind"));
lyr.name = desc.getString(charIDToTypeID("Nm "));
lyr.id = desc.getInteger(stringIDToTypeID("layerID"));
if (lyr.type == '4')
{
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
if(desc.hasKey(stringIDToTypeID('layerEffects')))
{
if(desc.getBoolean (stringIDToTypeID('layerFXVisible')))
{
desc = desc.getObjectValue(stringIDToTypeID('layerEffects'));
if(desc.hasKey(stringIDToTypeID('bevelEmboss')))
{
desc = desc.getObjectValue(stringIDToTypeID('bevelEmboss'));
if(desc.hasKey(stringIDToTypeID('localLightingAngle')))
{
var BevelAndEmbossAngle = desc.getUnitDoubleValue(stringIDToTypeID('localLightingAngle'));
if(BevelAndEmbossAngle == '90')
{
lyrs.push(lyr);
}
}
}
}
}
};
layers++;
};
return lyrs;
};