Skip to main content
Upendra_sengar
Inspiring
April 11, 2016
Answered

How to move one layer above another layer uisng jsx ?

  • April 11, 2016
  • 2 replies
  • 1402 views

Hello guys,

can some tell me how to move one layer above another layer using jsx script ?

This topic has been closed for replies.
Correct answer natrev

Hi Upendra,

Try this Code..

var doc=app.activeDocument;

var moveLayer = doc.activeLayer; 

var targetLayer = doc.layers[0];//say topmost layer; 

moveLayer.move(targetLayer,ElementPlacement.PLACEBEFORE); 

doc.activeLayer=targetLayer;

//SelectionLayer;

var laySB=doc.activeLayer.bounds;

doc.selection.select([[laySB[0],laySB[1]],[laySB[2],laySB[1]],[laySB[2],laySB[3]],[laySB[0],laySB[3]]], SelectionType.REPLACE, 0, false);

doc.activeLayer=moveLayer;

align('AdCV');

align('AdCH');

doc.selection.deselect();

function align(method) { 

  var desc = new ActionDescriptor(); 

  var ref = new ActionReference(); 

  ref.putEnumerated( charIDToTypeID( "Lyr " ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) ); 

  desc.putReference( charIDToTypeID( "null" ), ref ); 

  desc.putEnumerated( charIDToTypeID( "Usng" ), charIDToTypeID( "ADSt" ), charIDToTypeID( method ) ); 

  try{ 

  executeAction( charIDToTypeID( "Algn" ), desc, DialogModes.NO ); 

  }catch(e){} 

2 replies

Chuck Uebele
Community Expert
Community Expert
April 11, 2016

Pretty much you just need to record the layer you want to move and the layer you want the other layer moved above into variables or some method

var moveLayer = doc.activeLayer;

var targetLayer = doc.layers[0];//say topmost layer;

//Then just punch in the layers you want to move into the below line with where you want to move it:

moveLayer.move(targetLayer.ElementPlacement.PLACEBEFORE);

Upendra_sengar
Inspiring
April 12, 2016

whether it'll move at same position where target layer is present.

JJMack
Community Expert
Community Expert
April 11, 2016

One way is to use scriptlistener code for layer>arrange>bring layer forward  also search

https://forums.adobe.com/search.jspa?place=%2Fplaces%2F1383833&sort=updatedDesc&q=move+layer+up+stack

page 64

JavaScript Scripting Reference JavaScript Object Reference 64

}

}

// sort the layers by name

for (var x = 0; x < app.activeDocument.layers.length; x++) {

for (var y = 0; y < app.activeDocument.layers.length - 1 - x; y++) {

// Compare in a non-case sensitive way

var doc1 = app.activeDocument.layers.name

var doc2 = app.activeDocument.layers[y + 1].name

if (doc1.toUpperCase() > doc2.toUpperCase()) {

app.activeDocument.layers.move(app.activeDocument.layers[y+1],ElementPlacement.PLACEAFTER)  <-----------------------------------------------------------

}

}

}

JJMack
Upendra_sengar
Inspiring
April 12, 2016

Sorry i could not explain it in question , I'm mean to move a layer on same coordinates where target layer is present.

natrev
natrevCorrect answer
Legend
April 12, 2016

Hi Upendra,

Try this Code..

var doc=app.activeDocument;

var moveLayer = doc.activeLayer; 

var targetLayer = doc.layers[0];//say topmost layer; 

moveLayer.move(targetLayer,ElementPlacement.PLACEBEFORE); 

doc.activeLayer=targetLayer;

//SelectionLayer;

var laySB=doc.activeLayer.bounds;

doc.selection.select([[laySB[0],laySB[1]],[laySB[2],laySB[1]],[laySB[2],laySB[3]],[laySB[0],laySB[3]]], SelectionType.REPLACE, 0, false);

doc.activeLayer=moveLayer;

align('AdCV');

align('AdCH');

doc.selection.deselect();

function align(method) { 

  var desc = new ActionDescriptor(); 

  var ref = new ActionReference(); 

  ref.putEnumerated( charIDToTypeID( "Lyr " ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) ); 

  desc.putReference( charIDToTypeID( "null" ), ref ); 

  desc.putEnumerated( charIDToTypeID( "Usng" ), charIDToTypeID( "ADSt" ), charIDToTypeID( method ) ); 

  try{ 

  executeAction( charIDToTypeID( "Algn" ), desc, DialogModes.NO ); 

  }catch(e){}