Skip to main content
Simonetos The Greek
Inspiring
July 7, 2019
Answered

How to get values from an applied bevel and emboss effect for multiple layers?

  • July 7, 2019
  • 1 reply
  • 377 views

Greetings to everyone!!!

Well, I created this function below, to get some values from an applied bevel and emboss effect, like shading angle, shading altitude etc.

alert("Angle: " + getBevelAndEmbossValues()[0] + "\nAltitude: " + getBevelAndEmbossValues()[1]);


function getBevelAndEmbossValues()

    try

    { 

        var ref = new ActionReference(); 

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

        var desc = executeActionGet(ref).getObjectValue(stringIDToTypeID('layerEffects')).getObjectValue(stringIDToTypeID('bevelEmboss')); 

        return [desc.getUnitDoubleValue(stringIDToTypeID('localLightingAngle')),

                desc.getUnitDoubleValue(stringIDToTypeID('localLightingAltitude'))];

    }

    catch(e)

    {

        alert(e);

    } 

};


What I want to do now, is to do the same thing but for multiple layers. Exactly like this function below does with layer's color. I tried several things but my knowledge level didn't help. Any idea?

function getLayersData()

{

    var lyrs = [];

    var layers = 1;

    while (true)

    {

        ref = new ActionReference();

        ref.putIndex(charIDToTypeID('Lyr '), layers);

       

        try{var desc = executeActionGet(ref);}catch(err){alert(err);break;};

       

        var lyr = {};

        lyr.type = desc.getInteger(stringIDToTypeID("layerKind"));

        lyr.name = desc.getString(charIDToTypeID("Nm  "));

        lyr.id = desc.getInteger(stringIDToTypeID("layerID"));

       

        if (lyr.type == layerType && lyr.name.match(layerName))

        {

            var adj = desc.getList(stringIDToTypeID("adjustment")).getObjectValue(0);

            if (adj.hasKey(stringIDToTypeID("color")))

            {

                var curColor = new SolidColor();

                curColor.rgb.red = adj.getObjectValue(stringIDToTypeID("color")).getUnitDoubleValue(stringIDToTypeID("red"));

                curColor.rgb.green = adj.getObjectValue(stringIDToTypeID("color")).getUnitDoubleValue(stringIDToTypeID("grain"));

                curColor.rgb.blue = adj.getObjectValue(stringIDToTypeID("color")).getUnitDoubleValue(stringIDToTypeID("blue"));

                lyr.color = curColor;

                if (lyr.color.rgb.hexValue == currentColor[0])

                {

                    lyrs.push(lyr);                                       

                };         

            };

        };

        layers++;           

    };

    return lyrs;

};

This topic has been closed for replies.
Correct answer Simonetos The Greek

Well I finally managed to solve it!! Here is my solution... If anyone has anything better...

    var layers = getLayersData();

    alert (layers.length + ' layers found!!!' ,  'Message');

   

    function getLayersData()

    {

        var lyrs = [];

        var layers = 1;

        while (true)

        {

            ref = new ActionReference();

            ref.putIndex(charIDToTypeID('Lyr '), layers);

           

            try{var desc = executeActionGet(ref);}catch (err){break;};

           

            var lyr = {};

            lyr.type = desc.getInteger(stringIDToTypeID("layerKind"));

            lyr.name = desc.getString(charIDToTypeID("Nm  "));

            lyr.id = desc.getInteger(stringIDToTypeID("layerID"));

           

            if (lyr.type == '4')

            {                           

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

                if(desc.hasKey(stringIDToTypeID('layerEffects')))

                {

                    if(desc.getBoolean (stringIDToTypeID('layerFXVisible')))

                    {

                        desc = desc.getObjectValue(stringIDToTypeID('layerEffects'));

                        if(desc.hasKey(stringIDToTypeID('bevelEmboss')))

                        {

                            desc = desc.getObjectValue(stringIDToTypeID('bevelEmboss'));

                            if(desc.hasKey(stringIDToTypeID('localLightingAngle')))

                            {

                                var BevelAndEmbossAngle = desc.getUnitDoubleValue(stringIDToTypeID('localLightingAngle'));

                                if(BevelAndEmbossAngle == '90')

                                {

                                    lyrs.push(lyr);

                                }

                            }

                        }

                    }

                }

               

            };

            layers++;           

        };

        return lyrs;

    };

1 reply

Simonetos The Greek
Simonetos The GreekAuthorCorrect answer
Inspiring
July 9, 2019

Well I finally managed to solve it!! Here is my solution... If anyone has anything better...

    var layers = getLayersData();

    alert (layers.length + ' layers found!!!' ,  'Message');

   

    function getLayersData()

    {

        var lyrs = [];

        var layers = 1;

        while (true)

        {

            ref = new ActionReference();

            ref.putIndex(charIDToTypeID('Lyr '), layers);

           

            try{var desc = executeActionGet(ref);}catch (err){break;};

           

            var lyr = {};

            lyr.type = desc.getInteger(stringIDToTypeID("layerKind"));

            lyr.name = desc.getString(charIDToTypeID("Nm  "));

            lyr.id = desc.getInteger(stringIDToTypeID("layerID"));

           

            if (lyr.type == '4')

            {                           

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

                if(desc.hasKey(stringIDToTypeID('layerEffects')))

                {

                    if(desc.getBoolean (stringIDToTypeID('layerFXVisible')))

                    {

                        desc = desc.getObjectValue(stringIDToTypeID('layerEffects'));

                        if(desc.hasKey(stringIDToTypeID('bevelEmboss')))

                        {

                            desc = desc.getObjectValue(stringIDToTypeID('bevelEmboss'));

                            if(desc.hasKey(stringIDToTypeID('localLightingAngle')))

                            {

                                var BevelAndEmbossAngle = desc.getUnitDoubleValue(stringIDToTypeID('localLightingAngle'));

                                if(BevelAndEmbossAngle == '90')

                                {

                                    lyrs.push(lyr);

                                }

                            }

                        }

                    }

                }

               

            };

            layers++;           

        };

        return lyrs;

    };