Получить значения из примененного скоса и тиснения для нескольких слоев? - PullRequest
0 голосов
/ 07 июля 2019

Я создал эту функцию ниже, чтобы получить некоторые значения из примененного эффекта скоса и тиснения , например угол затенения , высота затенения и т. Д.

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);  
    }    
};

Теперь я хочу сделать то же самое, но для несколько слоев .Точно так же, как эта функция ниже делает с цветом слоя.Я попробовал несколько вещей, но мой уровень знаний не помог.Есть идеи?

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;  
};  

1 Ответ

0 голосов
/ 09 июля 2019

Ну, наконец-то мне удалось это решить !! Вот мое решение ... Если у кого-нибудь есть что-нибудь лучше ...

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;
};
...