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
L'instruction suivante assigne à la variable "myMaskShape" la propriété Forme du masque du masque que l'on vient de créer:
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
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()
: