Answered
Apply Layer Mask to the Group it is in
- May 1, 2022
- 3 replies
- 2054 views
I'll post the code later then!
@rrprec – Try this and let me know how you go...
EDIT: 3rd May 2022 - Cosmetic changes made to handle edge cases
All you need to do is copy the seven steps between the block comments (with or without their associated line comments) into each of the 3 placeholder comments for the other layers. You then only need to change the absolute layer name parameter from "RGBA" to the new child layer name in each case, the rest of the steps are relative.
/* RGBA layer set */
// Select the child layer by name, not the parent group of same name
selectLayerName("RGBA");
// Select layer mask channel
selectLayerMaskChannel();
// Load selection from mask channel
selectionFromMask();
// Remove mask from child layer
removeMask();
// Select parent layer set
activeDocument.activeLayer = activeDocument.activeLayer.parent;
// Add mask to set
addMaskFromSelection();
/* RGBA layer set */
/* effectsResult.RGB CC */
// placeholder
/* effectsResult.RGB CC */
/* effectsResult.RGB */
// placeholder
/* effectsResult.RGB */
/* VRayDenoiser.RGB */
// placeholder
/* VRayDenoiser.RGB */
///// Functions /////
function selectLayerName(lyrName) {
var idselect = stringIDToTypeID("select");
var desc266 = new ActionDescriptor();
var idnull = stringIDToTypeID("null");
var ref59 = new ActionReference();
var idlayer = stringIDToTypeID("layer");
ref59.putName(idlayer, lyrName);
desc266.putReference(idnull, ref59);
var idmakeVisible = stringIDToTypeID("makeVisible");
desc266.putBoolean(idmakeVisible, false);
var idlayerID = stringIDToTypeID("layerID");
var list41 = new ActionList();
list41.putInteger(3);
desc266.putList(idlayerID, list41);
executeAction(idselect, desc266, DialogModes.NO);
if (activeDocument.activeLayer.kind === LayerKind.NORMAL) {
} else {
app.runMenuItem(stringIDToTypeID('selectNoLayers'));
alert('Error: No normal layer found!');
}
}
function selectLayerMaskChannel() {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var reference = new ActionReference();
reference.putEnumerated( s2t( "channel" ), s2t( "channel" ), s2t( "mask" ));
descriptor.putReference( s2t( "null" ), reference );
descriptor.putBoolean( s2t( "makeVisible" ), false );
executeAction( s2t( "select" ), descriptor, DialogModes.NO );
}
function selectionFromMask() {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var reference = new ActionReference();
var reference2 = new ActionReference();
reference.putProperty( s2t( "channel" ), s2t( "selection" ));
descriptor.putReference( s2t( "null" ), reference );
reference2.putEnumerated( s2t( "channel" ), s2t( "ordinal" ), s2t( "targetEnum" ));
descriptor.putReference( s2t( "to" ), reference2 );
executeAction( s2t( "set" ), descriptor, DialogModes.NO );
}
function removeMask() {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var reference = new ActionReference();
reference.putEnumerated( s2t( "channel" ), s2t( "ordinal" ), s2t( "targetEnum" ));
descriptor.putReference( s2t( "null" ), reference );
executeAction( s2t( "delete" ), descriptor, DialogModes.NO );
}
function addMaskFromSelection() {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var reference = new ActionReference();
descriptor.putClass( s2t( "new" ), s2t( "channel" ));
reference.putEnumerated( s2t( "channel" ), s2t( "channel" ), s2t( "mask" ));
descriptor.putReference( s2t( "at" ), reference );
descriptor.putEnumerated( s2t( "using" ), s2t( "userMaskEnabled" ), s2t( "revealSelection" ));
executeAction( s2t( "make" ), descriptor, DialogModes.NO );
}
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.