isLayerMaskSelected()

Discussion of Photoshop Scripting, Photoshop Actions and Photoshop Automation in General

Moderators: Tom, Kukurykus

undavide

isLayerMaskSelected()

Post by undavide »

Hi,
I was pretty sure to have this function in my snippets collection, yet I can just test whether:

Code: Select allfunction hasLayerMask() {
    var ref = new ActionReference();
    ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
    var desc = executeActionGet(ref);
    return desc.hasKey(charIDToTypeID("UsrM"));
}

I've seen there are StringIDs to check userMaskEnabled and userMaskLinked, but I've found no way to test whether the Layer Mask is selected (the double border around its thumbnail) or it is the Layer itself to be selected.
Any help is appreciated!
Thank you

Davide Barranca
http://www.davidebarranca.com
http://www.cs-extensions.com
c.buliarca

isLayerMaskSelected()

Post by c.buliarca »

Hi Davide,

I have this function in my BCM_Tools > BCM11_ ToggleMask.jsx, you can download the tools from here:

http://www.buliarca.net63.net/counter/c ... _Tools.zip

Code: Select allfunction isChannelMaskSelected(){
    var ret = false;
    if(hasMask() == true){
        if(getChannelMaskSel() == true)
        {
            ret = true;
        }
    else{ret = false}
    }
    return ret;
};

function hasMask(){
        var hasMask = false;

        var ref = new ActionReference();
        // var keyHasMask = app.stringIDToTypeID( 'hasUserMask' );
        var keyHasMask = app.charIDToTypeID( 'UsrM' );
        ref.putEnumerated( app.charIDToTypeID( 'Lyr ' ), app.charIDToTypeID( 'Ordn' ), app.charIDToTypeID( 'Trgt' ) );
        var desc = executeActionGet( ref );
        if ( desc.hasKey( keyHasMask ) ) {
            hasMask = true;
        }
    return hasMask;
}

function getChannelMaskSel(){
    var ref = new ActionReference();
    ref.putProperty( charIDToTypeID( 'Prpr' ), stringIDToTypeID('numberOfChannels') );
    ref.putEnumerated( charIDToTypeID( "Dcmn" ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
    var desc = executeActionGet(ref);
    var numberOfChannels = desc.getInteger(stringIDToTypeID('numberOfChannels'));
    var ref = new ActionReference();
    ref.putProperty( charIDToTypeID( 'Prpr' ), stringIDToTypeID( 'targetChannels' ) );
    ref.putEnumerated( app.charIDToTypeID( 'Lyr ' ), app.charIDToTypeID( 'Ordn' ), app.charIDToTypeID( 'Trgt' ) );
    var desc = executeActionGet( ref );
    var list = desc.getList( stringIDToTypeID( 'targetChannels' ) );
    var firstIndex = list.getReference(0).getIndex();
    return list.count == 1 && firstIndex == numberOfChannels+1;
}
undavide

isLayerMaskSelected()

Post by undavide »

Hi Cristian,
thank you very much for the code!

Davide