I'm trying to simply remove the selected masks of a layer. So I'm trying to use a backward loop to remove them but so far the script only removes the last item of the array.
Code: Select all
function theAlert(){alert("Select one or several masks to remove.");return};
var myComp = app.project.activeItem;
//check if a comp is selcted
if(myComp == null){theAlert()}else{
var theLayer=myComp.selectedLayers[0];
//check if a layer is selected
if(theLayer == null){theAlert()}else{
var masksGroup = theLayer.property("ADBE Mask Parade");
//check if the layer has masks
if(masksGroup.numProperties == 0 || myComp.selectedProperties[0].isMask == false){theAlert()}else{
//remove masks
var numMasks=masksGroup.numProperties;
app.beginUndoGroup("Mask removal");
for ( i = numMasks; i >= 1; i--){
if(masksGroup.property(i).selected)
masksGroup.property(i).remove();
}
app.endUndoGroup();
}//end check if the layer has masks
}//end check if a layer is selected
}//end check if a comp is selected
So I've tried a sort of comparison between my two arrays in order to remove one form the other. But this doesn't work at all. I don't know if it's a good idea to put a backward loop inside a forward loop.
Code: Select all
function theAlert(){alert("Select one or several masks to remove.");return};
var myComp = app.project.activeItem;
//check if a comp is selcted
if(myComp == null){theAlert()}else{
var theLayer=myComp.selectedLayers[0];
//check if a layer is selected
if(theLayer == null){theAlert()}else{
var masksGroup = theLayer.property("ADBE Mask Parade");
//check if the layer has masks
if(masksGroup.numProperties == 0 || myComp.selectedProperties[0].isMask == false){theAlert()}else{
//create selected Masks Array
var numMasks=masksGroup.numProperties;
var selectedMasks = new Array();
for (m= 1; m <= numMasks; m++){
if (masksGroup.property(m).selected){
selectedMasks[selectedMasks.length]=masksGroup.property(m);}
};
//remove selected masks
app.beginUndoGroup("Mask removal");
for (j = 1; j <= numMasks; j++){
var curMask = masksGroup.property(j);
for (i = selectedMasks.length; i >0; i--){
if (curMask.name == selectedMasks[i].name)
curMask.remove();
}
}
app.endUndoGroup();
}//end check if the layer has masks
}//end check if a layer is selected
}//end check if a comp is selcted