Scripting/Calques/Les masques

Les masques

La propriété de Masques est un groupe de propriétés (PropertyGroup), auquel on peut faire référence en utilisant property("Masks") ou tout simplement Masks.

On ajoute un masque à un calque par l'intermédiaire de la méthode addProperty(). Pour ajouter un masque au premier calque sélectionné (selectedLayers représente un tableau contenant l'ensemble des calques sélectionnés dans la composition), on peut écrire par exemple:

myComp = app.project.activeItem;
myLayer = myComp.selectedLayers[0];
myMask = myLayer.Masks.addProperty("Mask");

Si le masque existe déjà, on peut lui faire référence en précisant sa position (i.e., son index) au sein du groupe de propriétés auquel il appartient.

ajout d'un masque

Ajout d'un masque

L'instruction suivante assigne à la variable "myMaskShape" la propriété Forme du masque du masque que l'on vient de créer:

myMaskShape = myMask.maskShape;

On aurait pu aussi écrire myMaskShape = myMask.property(1); ou encore myMaskShape = myMask.property("maskShape");.

Pour attribuer une forme au masque, il faut au préalable créer un objet Shape(). Cet objet possède les quatre attributs suivants: closed, vertices, inTangents et outTangents.

L'attribut closed spécifie si la forme est fermée ou non. L'attribut vertices désigne l'ensemble des points d'ancrage de la forme: il s'agit d'un tableau dont chaque élément est une paire de valeur (un couple), représentant l'abscisse et l'ordonnée d'un point de la forme. Les attributs inTangents et outTangents sont également des tableaux, chaque élément est une paire représentant la valeur de la tangente, i.e., un vecteur se rapprochant (inTangents) ou s'éloignant (outTangents) d'un point du masque. Par défaut ces deux attributs sont nuls. Dans le cas d'un masque rotoBézier (déclaré avec l'instruction myMask.rotoBezier = true;), ces attributs n'ont pas à être spécifiés car ils sont automatiquement calculés. Une fois que la forme est créée, on l'affecte à la Forme du masque par l'intermédiaire de la méthode setValue(), setValueAtTime() ou setValuesAtTimes() (voir la section sur les images clés).

Si l'on souhaite créer un masque rectangulaire de taille 200x100, centré par rappport à la composition de taille 320x240, on peut écrire quelque chose comme cela:

myShape = new Shape();
myShape.vertices = [[60,70],[60,170],[260,170],[260,70]];
myShape.closed = true;
myMaskShape.setValue(myShape);

création d'une forme

Création d'une forme

Si l'on souhaite avoir un masque avec des courbes, il faut préciser la valeur des tangentes. On aurait pu écrire cela par exemple:

myShape = new Shape();
myShape.vertices = [[20,120],[160,220],[300,120],[160,20]];
myShape.inTangents = [[0,-100],[-120,0],[0,100],[120,0]];
myShape.outTangents = [[0,100],[120,0],[0,-100],[-120,0]];
myShape.closed = true;
myMaskShape.setValue(myShape);

On peut également paramétrer le mode de masque. Cet attribut est noté maskMode et sa valeur est un type énuméré qui peut être entre autres MaskMode.SUBTRACT ou MaskMode.INTERSECT (voir le scripting guide pour les autres modes disponibles). On peut inverser un masque en utilisant l'attribut booléen inverted.

Il est possible d'animer la position des points d'un masque ainsi que la valeur de leurs tangentes. Pour réaliser cela, on se sert de la méthode setValueAtTime() ou setValuesAtTimes():

myMaskShape.setValueAtTime(t,myShape);