Skip to main content
Participant
Nov 12, 2015 4:46 PM UTC
Question

In photoshop js scripting, How can i select more than one layer? In scriptlistener, it is "AddTo"

In photoshop js scripting, How can i select more than one layer?   In scriptlistener, it is called "AddTo"

This topic is closed to new replies. Start a new post to keep the conversation going.

3 replies

SuperMerlin
Inspiring
Nov 12, 2015 7:49 PM UTC

Have a look at the "Snippets" section @ http://www.ps-bridge-scripts.talktalk.net/

You will find a few useful functions including selecting more than one layer using index or by ID

Translate
Chuck Uebele
Community Expert
Community Expert
Nov 12, 2015 6:57 PM UTC

Moving to Scripting forum.

Translate
JJMack
Community Expert
Community Expert
Nov 12, 2015 6:00 PM UTC

Scriptlistener code not ease to read  I created a four layer document ad did the following

Alt+, (Select bottom layer)

Shift+Alt+[ (Add next layer up to selection)

I commented the Script listener code generated for those four steps


Have four layer in photoshop

// ============Select bottom layer===========================================

var idslct = charIDToTypeID( "slct" );

    var desc67 = new ActionDescriptor();

    var idnull = charIDToTypeID( "null" );

        var ref52 = new ActionReference();

        var idLyr = charIDToTypeID( "Lyr " );

        var idOrdn = charIDToTypeID( "Ordn" );

        var idBack = charIDToTypeID( "Back" );

        ref52.putEnumerated( idLyr, idOrdn, idBack );

    desc67.putReference( idnull, ref52 );

    var idMkVs = charIDToTypeID( "MkVs" );

    desc67.putBoolean( idMkVs, false );

executeAction( idslct, desc67, DialogModes.NO );

// =============Add next layer up to selection==========================================

var idslct = charIDToTypeID( "slct" );

    var desc68 = new ActionDescriptor();

    var idnull = charIDToTypeID( "null" );

        var ref53 = new ActionReference();

        var idLyr = charIDToTypeID( "Lyr " );

        var idOrdn = charIDToTypeID( "Ordn" );

        var idFrwr = charIDToTypeID( "Frwr" );

        ref53.putEnumerated( idLyr, idOrdn, idFrwr );

    desc68.putReference( idnull, ref53 );

    var idselectionModifier = stringIDToTypeID( "selectionModifier" );

    var idselectionModifierType = stringIDToTypeID( "selectionModifierType" );

    var idaddToSelection = stringIDToTypeID( "addToSelection" );

    desc68.putEnumerated( idselectionModifier, idselectionModifierType, idaddToSelection );

    var idMkVs = charIDToTypeID( "MkVs" );

    desc68.putBoolean( idMkVs, false );

executeAction( idslct, desc68, DialogModes.NO );

Sometime you have to use script listener code for all Photoshop features are not supported in Adobe DOM hete is a script I wrote to selet all visible layers.

/* ==========================================================

// 2015  John J. McAssey (JJMack)

// ======================================================= */

// This script is supplied as is. It is provided as freeware.

// The author accepts no liability for any problems arising from its use.

// enable double-clicking from Mac Finder or Windows Explorer

#target photoshop // this command only works in Photoshop CS2 and higher

// bring application forward for double-click events

app.bringToFront();

// ensure at least one document open

if (!documents.length) alert('There are no documents open.', 'No Document');

else main();

///////////////////////////////////////////////////////////////////////////////

//  main function

///////////////////////////////////////////////////////////////////////////////

function main() {

    var visibleLayers = new Array;

    var numberOfVisible = 0;

  try { visibleLayers = processArtLayers(activeDocument,numberOfVisible,visibleLayers);}

  // display error message if something goes wrong

  catch(e) { alert(e + ': on line ' + e.line, 'Script Error', true); }

  setSelectedLayers( visibleLayers )

  }

///////////////////////////////////////////////////////////////////////////////

// End - main function

///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////

// Function: processsArtLayers

// Input: document or layer set

///////////////////////////////////////////////////////////////////////////////

function processArtLayers(obj,numberOfVisible,visibleLayers) {

    for( var i = obj.artLayers.length-1; 0 <= i; i--) {

        try {

            if(obj.artLayers.visible) {

                 visibleLayers[numberOfVisible]=obj.artLayers.name

                 numberOfVisible++

                 }

            }

        catch (e) {   }

        }

    for( var i = obj.layerSets.length-1; 0 <= i; i--) {

       processArtLayers(obj.layerSets,numberOfVisible,visibleLayers);

       }

  return visibleLayers

}

///////////////////////////////////////////////////////////////////////////////

// Function: setSelectedLayers

// Usage: Selects an array of layers

// Input:  Array selectedLayers

// Return: <none>

///////////////////////////////////////////////////////////////////////////////

function setSelectedLayers( layerIndexesOrNames ) {

  // first select the first one

  setSelectedLayer( layerIndexesOrNames[0] );

  // then add to the selection

  for ( var i = 1; i < layerIndexesOrNames.length; i++) {

       addSelectedLayer( layerIndexesOrNames );

       }

}

///////////////////////////////////////////////////////////////////////////////

// Function: setSelectedLayer

// Usage: Selects the first layer

// Input:  Array selectedLayers

// Return: <none>

///////////////////////////////////////////////////////////////////////////////

function setSelectedLayer( layerIndexOrName ) {

  try {

  var id239 = charIDToTypeID( "slct" );

  var desc45 = new ActionDescriptor();

  var id240 = charIDToTypeID( "null" );

  var ref43 = new ActionReference();

  var id241 = charIDToTypeID( "Lyr " );

  if ( typeof layerIndexOrName == "number" ) {

  ref43.putIndex( id241, layerIndexOrName );

  } else {

  ref43.putName( id241, layerIndexOrName );

  }

  desc45.putReference( id240, ref43 );

  var id242 = charIDToTypeID( "MkVs" );

  desc45.putBoolean( id242, false );

  executeAction( id239, desc45, DialogModes.NO );

  }

  catch(e) {

  alert(e + ":" + e.line); // do nothing

  }

}

///////////////////////////////////////////////////////////////////////////////

// Function: addSelectedLayer

// Usage: adds the rest of the layers in the array to the first layer

// Input:  Array selectedLayers

// Return: <none>

///////////////////////////////////////////////////////////////////////////////

function addSelectedLayer( layerIndexOrName ) {

  try {

  var id243 = charIDToTypeID( "slct" );

  var desc46 = new ActionDescriptor();

  var id244 = charIDToTypeID( "null" );

  var ref44 = new ActionReference();

  var id245 = charIDToTypeID( "Lyr " );

  if ( typeof layerIndexOrName == "number" ) {

  ref44.putIndex( id245, layerIndexOrName );

  } else {

  ref44.putName( id245, layerIndexOrName );

  }

  desc46.putReference( id244, ref44 );

  var id246 = stringIDToTypeID( "selectionModifier" );

  var id247 = stringIDToTypeID( "selectionModifierType" );

  var id248 = stringIDToTypeID( "addToSelection" );

  desc46.putEnumerated( id246, id247, id248 );

  var id249 = charIDToTypeID( "MkVs" );

  desc46.putBoolean( id249, false );

  executeAction( id243, desc46, DialogModes.NO );

  }

  catch(e) {

  alert(e + ":" + e.line); // do nothing

  }

}

Translate
JJMack