Skip to main content
oliverIntergrafika
Inspiring
October 20, 2016
Question

Determining if the layer link is turned on or off

  • October 20, 2016
  • 1 reply
  • 877 views

Hi,

With scriptListener plugin I was able to log the layer link turn off actions:

var iddisableLayerLink = stringIDToTypeID( "disableLayerLink" );

    var desc5 = new ActionDescriptor();

    var idnull = charIDToTypeID( "null" );

        var ref2 = new ActionReference();

        var idLyr = charIDToTypeID( "Lyr " );

        var idOrdn = charIDToTypeID( "Ordn" );

        var idTrgt = charIDToTypeID( "Trgt" );

        ref2.putEnumerated( idLyr, idOrdn, idTrgt );

    desc5.putReference( idnull, ref2 );

    var idT = charIDToTypeID( "T   " );

        var desc6 = new ActionDescriptor();

        var idlnkE = charIDToTypeID( "lnkE" );

        desc6.putBoolean( idlnkE, false );

    var idLyr = charIDToTypeID( "Lyr " );

    desc5.putObject( idT, idLyr, desc6 );

executeAction( iddisableLayerLink, desc5, DialogModes.NO );

How can I retrieve the boolean which is indicating the turned on/off state of the layer's link?

Thanks a lot!

This topic has been closed for replies.

1 reply

Kukurykus
Legend
May 21, 2018

If you are in CS6 EXTENDED, where AM was still limited you can use this script (however it works in higher versions too):

$.level = 0; function sTT(v) {return stringIDToTypeID(v)}

function layer(v1, v2){

     try{

          (ref = new ActionReference()).putIndex(l = sTT('layer'), 0)

          if (((iN = isNaN(v1)) && v2) || !iN && !v2 && v1 != null) {

               executeActionGet(ref).getBoolean(sTT('background'))

          }

     }

     catch (err) {v1++}

     nu = v1 != undefined, eval("(ref = new ActionReference()).put" +

     (nu ? (iN ? "Name" : (v2 ? "Identifier" : "Index")) : "Enumerated") +

     "(l, " + (nu ? "v1" : "sTT('ordinal'), sTT('targetEnum')") + ")")

     if ((dsc = executeActionGet(ref)).hasKey(sTT('linkedLayerIDs'))) {

          with(psd = new PhotoshopSaveOptions()) {

               layers = !(spotColors = alphaChannels =

               embedColorProfile = annotations = false)

          }

          activeDocument.saveAs(fle = File('~/desktop/.psd'), psd, true)

          var m, lnk = dsc.getInteger(sTT('itemIndex')); (function() {

               fle.encoding = 'binary', fle.open('r'); var r = fle.read()

               index = r.indexOf('8BIM\x040'), fle.seek(index + 10)

               function bin(v) {return v * fle.readch().charCodeAt()}

               var d = fle.read(bin(256) + bin(1)), re = /\x00/g

               while(re.exec(d)) if (m = re.lastIndex == lnk) {break}

               fle.close(), fle.remove(); return m // DLL index

          })()

     }

     return Boolean(!m)

}

Examples how to use layer()​:

layer()     /     active layer

layer('layer 1')     /     layer 1

layer(1, true)     /     identifier 1

layer(0)     /     index 1 or background