Answered
Is there any way to get active layer comp in JSX?
I want go get currently active layer comp.
Is there any way to that?
I want go get currently active layer comp.
Is there any way to that?
Probably so. Works in CC2018 (verified)
aaa()
function aaa()
{
try
{
var r = new ActionReference();
r.putProperty( charIDToTypeID( "Prpr" ), stringIDToTypeID( "json" ) );
r.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var ret = executeActionGet(r);
var json = ret.getString(stringIDToTypeID("json"));
eval("var obj= " + json);
var ok = false;
for (var i = 0; i < obj.comps.length; i++)
{
if (obj.comps[i].applied)
{
var idx = get_comp_idx(obj.comps[i].id);
alert ( obj.comps[i].name + "\n\n" + "index: " + (idx-1) + "\n\n" + "id:" + obj.comps[i].id + "\n\n" +
"app.activeDocument.layerComps["+(idx-1)+"].name = " + app.activeDocument.layerComps[idx-1].name, "Applied comp");
ok = true;
break;
}
}
if (!ok) alert ("No applied comp found");
function get_comp_idx(id)
{
try
{
var r = new ActionReference();
r.putProperty( charIDToTypeID( "Prpr" ), stringIDToTypeID("compsList"));
r.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var comps = executeActionGet(r).getList(stringIDToTypeID("compsList"));
for (var i = 0; i < comps.count; i++)
if (comps.getObjectValue(i).getInteger(stringIDToTypeID("ID")) == id)
return comps.getObjectValue(i).getInteger(stringIDToTypeID("itemIndex"));
return -1;
}
catch (e) { alert(e); }
}
}
catch (e) { alert(e) }
}
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.