Ich habe versucht, ein Skript zu erstellen, das automatisch einen Effekt auf die ausgewählte Ebene anwendet. Bisher sieht es so aus:
var myLayer = app.project.activeItem.selectedLayers[0];
Ich habe hier und hier die Verwendung des Effects
Attributs gesehen, das so verwendet wird:
var myEffect = myLayer.Effects.addProperty("My Effect");
Die einzige Klasse, die ich im CS3-Skriptleitfaden gefunden habe, die die addProperty
Methode enthält, war das PropertyGroup
Objekt, das auf Seite 147 zu finden ist. Es wird nicht erwähnt myLayer.Effects
. Tatsächlich habe ich noch nie ein Attribut mit einem großgeschriebenen Anfangsbuchstaben gesehen.
Ich werde dies verwenden, um das Erstellen von etwa 100 Kreisen auf einer Ebene zu automatisieren. (Diesen Effekt finden Sie unter Effekte & Voreinstellungen > Generieren > Kreis .) Ich möchte in der Lage sein, eine Liste von X/Y-Koordinaten bereitzustellen und für jede einen Kreis mit diesem Zentrum und einer festen Größe zu erzeugen. Diese Liste könnte aus einer Datei oder aus einer Liste aller Nullobjekte auf derselben Ebene stammen.
Ich habe die Antwort tatsächlich im CS3-Skriptleitfaden gefunden . CompItem#selectedLayers
gibt tatsächlich ein Array von AVLayer
Objekten zurück. AVLayer
ist eine Unterklasse von Layer
und hat einige Attribute. Hier sind einige davon:
Seltsamerweise müssen Sie beim Aufrufen dieser Attribute darauf achten, ob das Attribut aus einem oder zwei Wörtern besteht. Wenn es sich um ein Wort handelt, wird der erste Buchstabe groß geschrieben, aber wenn es sich um zwei Wörter handelt, wird der erste Buchstabe klein geschrieben und der Rest in Camel-Case-Form.
Wenn Sie beispielsweise eine AVLayer-Instanz aufgerufen haben myLayer
und ihre Liste der Effekte erhalten möchten, rufen Sie auf myLayer.Effects
, aber wenn Sie ihre X-Rotation erhalten möchten, rufen Sie auf myLayer.xRotation
.
Was mein Endziel betrifft, Kreise auf einer ausgewählten Ebene zu erstellen, habe ich mir Folgendes ausgedacht (funktioniert in CS5.5, obwohl auch eine Fehlerprüfung erforderlich ist, um festzustellen, ob eine Ebene tatsächlich ausgewählt ist!):
function createCircle(layer, coords, radius) {
var x = coords[0];
var y = coords[1];
var circle = layer.Effects.addProperty("Circle");
circle.Center.setValue([x, y]);
circle.Radius.setValue(radius);
return circle
}
var myComp = app.project.activeItem;
var myLayer = myComp.selectedLayers[0];
var circles = [];
//coordsList could come from an external file or another function
for (var i = 0; i < coordsList.length; i++) {
circles.push(createCircle(myLayer, coordsList[i], 75));
}
stib