Here is a slightly different version that uses Mike Hale's Layer functions.
Once you have a list of Layers they are normally selected by thier Layer Name. The problem here is if you have selected a few layers with the same name. This is where this should work as it gets the layers in turn from thier Layer ID.
Code: Select allgroupSelectedLayers();
var groupLayers = activeDocument.activeLayer.layers
var selectedLayers = new Array;
for(var i=0;i<groupLayers.length;i++){
activeDocument.activeLayer= groupLayers;
selectedLayers.push(getLayerId());
}
executeAction( charIDToTypeID('undo'), undefined, DialogModes.NO );
for(var a=0;a<selectedLayers.length;a++){
selLayer(a,false);
//Do what ever you want to the selected layer here.
}
function getLayerIDByItemIndex(idx) {
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "LyrI" ));
ref.putIndex( charIDToTypeID( "Lyr " ), idx );
return executeActionGet(ref).getInteger(charIDToTypeID( "LyrI" ));;
};
function getLayerId(){
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
d = executeActionGet(ref); //layer descriptor
return d.getInteger(charIDToTypeID('LyrI'));
};
function selLayer(layerID,add){
var result =getLayerItemIndexByLayerID(layerID);
//alert(result);
if(result != true){
selectLayerByIndex(result -1,add);
}else{
alert("Layer does not exist");
}
};
function getLayerItemIndexByLayerID(id) {
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "ItmI" ));
ref.putIdentifier( charIDToTypeID( "Lyr " ), id );
try{
return executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" ));
}catch(e){
//alert(e.number);
return true;
}
};
function selectLayerByIndex(index,add){
add = undefined ? add = false:add
var ref = new ActionReference();
ref.putIndex(charIDToTypeID("Lyr "), index);
var desc = new ActionDescriptor();
desc.putReference(charIDToTypeID("null"), ref );
if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) );
desc.putBoolean( charIDToTypeID( "MkVs" ), false );
try{
executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );
}catch(e){
alert(e.message);
}
};
function groupSelectedLayers(){
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putClass( stringIDToTypeID( "layerSection" ) );
desc.putReference( charIDToTypeID( "null" ), ref );
var ref2 = new ActionReference();
ref2.putEnumerated( charIDToTypeID( "Lyr " ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
desc.putReference( charIDToTypeID( "From" ), ref2 );
executeAction(charIDToTypeID( "Mk " ), desc, DialogModes.NO );
}
groupSelectedLayers
groupSelectedLayers
Thanks for posting this, I haven't run into the problem (yet) but its good to have this in the toolbox!
Patrick
Patrick
groupSelectedLayers
Paul MR wrote:activeDocument.activeLayer.layers
Nice, somehow I never made that connection.
When I run this I get two Layer 'does not exist' alerts and it skips the second from the top selected layer. The selLayer function seems to select the top most layer twice in the loop.
Does this happen with anyone else?
Mike
Nice, somehow I never made that connection.
When I run this I get two Layer 'does not exist' alerts and it skips the second from the top selected layer. The selLayer function seems to select the top most layer twice in the loop.
Does this happen with anyone else?
Mike
groupSelectedLayers
My fault entirely Mike I hadn't referenced the array item!.
selLayer(a,false); should be selLayer(selectedLayers[a],false);
This should work now.
Code: Select allgroupSelectedLayers();
var groupLayers = activeDocument.activeLayer.layers;
var selectedLayers = new Array;
for(var i=0;i<groupLayers.length;i++){
activeDocument.activeLayer= groupLayers;
selectedLayers.push(getLayerId());
}
executeAction( charIDToTypeID('undo'), undefined, DialogModes.NO );
for(var a=0;a<selectedLayers.length;a++){
selLayer(selectedLayers[a],false);
//Do what ever you want to the selected layer here.
}
function getLayerIDByItemIndex(idx) {
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "LyrI" ));
ref.putIndex( charIDToTypeID( "Lyr " ), idx );
return executeActionGet(ref).getInteger(charIDToTypeID( "LyrI" ));;
};
function getLayerId(){
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
d = executeActionGet(ref); //layer descriptor
return d.getInteger(charIDToTypeID('LyrI'));
};
function selLayer(layerID,add){
var result =getLayerItemIndexByLayerID(layerID);
//alert(result);
if(result != true){
selectLayerByIndex(result -1,add);
}else{
alert("Layer does not exist");
}
};
function getLayerItemIndexByLayerID(id) {
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "ItmI" ));
ref.putIdentifier( charIDToTypeID( "Lyr " ), id );
try{
return executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" ));
}catch(e){
//alert(e.number);
return true;
}
};
function selectLayerByIndex(index,add){
add = undefined ? add = false:add
var ref = new ActionReference();
ref.putIndex(charIDToTypeID("Lyr "), index);
var desc = new ActionDescriptor();
desc.putReference(charIDToTypeID("null"), ref );
if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) );
desc.putBoolean( charIDToTypeID( "MkVs" ), false );
try{
executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );
}catch(e){
alert(e.message);
}
};
function groupSelectedLayers(){
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putClass( stringIDToTypeID( "layerSection" ) );
desc.putReference( charIDToTypeID( "null" ), ref );
var ref2 = new ActionReference();
ref2.putEnumerated( charIDToTypeID( "Lyr " ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
desc.putReference( charIDToTypeID( "From" ), ref2 );
executeAction(charIDToTypeID( "Mk " ), desc, DialogModes.NO );
}
selLayer(a,false); should be selLayer(selectedLayers[a],false);
This should work now.
Code: Select allgroupSelectedLayers();
var groupLayers = activeDocument.activeLayer.layers;
var selectedLayers = new Array;
for(var i=0;i<groupLayers.length;i++){
activeDocument.activeLayer= groupLayers;
selectedLayers.push(getLayerId());
}
executeAction( charIDToTypeID('undo'), undefined, DialogModes.NO );
for(var a=0;a<selectedLayers.length;a++){
selLayer(selectedLayers[a],false);
//Do what ever you want to the selected layer here.
}
function getLayerIDByItemIndex(idx) {
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "LyrI" ));
ref.putIndex( charIDToTypeID( "Lyr " ), idx );
return executeActionGet(ref).getInteger(charIDToTypeID( "LyrI" ));;
};
function getLayerId(){
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
d = executeActionGet(ref); //layer descriptor
return d.getInteger(charIDToTypeID('LyrI'));
};
function selLayer(layerID,add){
var result =getLayerItemIndexByLayerID(layerID);
//alert(result);
if(result != true){
selectLayerByIndex(result -1,add);
}else{
alert("Layer does not exist");
}
};
function getLayerItemIndexByLayerID(id) {
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "ItmI" ));
ref.putIdentifier( charIDToTypeID( "Lyr " ), id );
try{
return executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" ));
}catch(e){
//alert(e.number);
return true;
}
};
function selectLayerByIndex(index,add){
add = undefined ? add = false:add
var ref = new ActionReference();
ref.putIndex(charIDToTypeID("Lyr "), index);
var desc = new ActionDescriptor();
desc.putReference(charIDToTypeID("null"), ref );
if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) );
desc.putBoolean( charIDToTypeID( "MkVs" ), false );
try{
executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );
}catch(e){
alert(e.message);
}
};
function groupSelectedLayers(){
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putClass( stringIDToTypeID( "layerSection" ) );
desc.putReference( charIDToTypeID( "null" ), ref );
var ref2 = new ActionReference();
ref2.putEnumerated( charIDToTypeID( "Lyr " ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
desc.putReference( charIDToTypeID( "From" ), ref2 );
executeAction(charIDToTypeID( "Mk " ), desc, DialogModes.NO );
}
groupSelectedLayers
I have run into something strange.
activeDocument.activeLayer.layers works in CS2 on my home system that also has CS3 and 4. However it doesn't work on another system that only has CS2 and different system that only has CS3.
If activeDocument.activeLayer.layers is a CS4 feature I would think that it would only work in CS4.
Mike
activeDocument.activeLayer.layers works in CS2 on my home system that also has CS3 and 4. However it doesn't work on another system that only has CS2 and different system that only has CS3.
If activeDocument.activeLayer.layers is a CS4 feature I would think that it would only work in CS4.
Mike
groupSelectedLayers
Would you believe it's your code Mike? (smile)
It originated here:
bb/viewtopic.php?t=1741&highlight=groupselectedlayers. ... ctedlayers
It originated here:
bb/viewtopic.php?t=1741&highlight=groupselectedlayers. ... ctedlayers
groupSelectedLayers
I was concerned that I lost some brain cells when I was hospitalized earlier this year. Now I sure I did.
Mike
Mike