2016-01-28 1 views
1

Je crée des scripts étendus pour Adobe Illustrator CS6 (javascript) et je dois supprimer tous les masques de découpe d'un document.Comment sélectionner et supprimer tous les masques de détourage dans un document Illustrator à l'aide de javascript?

J'ai déjà une solution mais ce n'est pas assez rapide dans les gros documents.

Voici mon code:

var releaseClippingMasks = function(document) { 
    var pathItems = document.pathItems; 
    log('Looking for clipping masks among ' + pathItems.length + ' elements'); 
    var n = 0; 
    for(var p = pathItems.length - 1; p >= 0; p--) { 
    if(p/1000 == Math.round(p/1000)) { 
     log(p + ' remaining'); 
    } 

    if(pathItems[p].clipping) { // accessing to the element [p] of pathItems takes a lot of time 
     pathItems[p].remove(); 
     n++; 
    } 
    } 
    log(n + ' deleted masks'); 
} 

Il n'y a pas tant de masques d'écrêtage dans mes documents, mais beaucoup de pathItems (100000+), donc itérer prend très longtemps.

Est-ce que quelqu'un connaît un meilleur moyen de sélectionner tous les masques de détourage dans un document par javascript? Toute aide serait très appréciée.

+1

fonctionne-t-'everyItem() de getElements()' dans votre environnement Illustrator.? Pour InDesign, cela est souvent utilisé pour «détacher» une collection en direct dans un tableau séparé, ce qui permet d'accéder à des éléments individuels beaucoup plus rapidement. Et vous l'avez déjà indiqué comme un candidat probable. – usr2564301

+0

Il n'existe pas de telle fonction dans l'environnement Illustrator. J'ai juste essayé avec InDesign et je ne l'ai pas trouvé non plus. Quoi qu'il en soit, si nous arrivons à obtenir tous les éléments d'un tableau, une itération sur chaque élément devrait être faite pour trouver ceux qui ont un masque d'écrêtage. – superrache

Répondre

1

Le meilleur moyen de tout sélectionner un masque d'écrêtage et de le supprimer:

// Select->Objects->Clipping Mask 
app.executeMenuCommand("Clipping Masks menu item"); 
// Edit->Clear 
app.executeMenuCommand("clear"); 
+0

Très rapide façon en effet! Merci beaucoup – superrache