Skip to main content
Participant
November 12, 2015
Question

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

  • November 12, 2015
  • 3 replies
  • 554 views

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

This topic has been closed for replies.

3 replies

SuperMerlin
Inspiring
November 12, 2015

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

Chuck Uebele
Community Expert
Community Expert
November 12, 2015

Moving to Scripting forum.

JJMack
Community Expert
Community Expert
November 12, 2015

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

  }

}

JJMack