4

Adobe Illustrator のスクリプトを作成するためのヘルパー クラスをいくつか作成しています。

私の問題は Eyelet オブジェクトから始まります。インスタンス化するとnew Group()、明らかGroupにコンストラクターがないため、最初は失敗します。

これが私のコードの簡素化されたバージョンです:

/****************** Collection Class **********************/

function Collection() {
    this.parent = app.activeDocument;
    this.typename = "Collection";
}

    Collection.prototype.setName = function(name) {
        this.instance.name = name;
    };

/****************** Group (extends collection) *****************/

function Group(name, parent) {
    this.parent = parent || this.parent;
    this.instance = this.parent.groupItems.add();
    if(name) {
        this.setName(name);
    } else {
        this.setName("Group");
    }
}

Group.prototype = new Collection();

/****************** Shape Class **********************/

function Shape() {
    this.parent = app.activeDocument;
    this.typename = "Shape";
}

Shape.prototype.setName = function(name) {
        this.instance.name = name;
    };

Shape.prototype.stroke = function(width, color) {
        this.instance.stroked = true;
        this.instance.strokeWeight = width;
        this.instance.strokeColor = color;
    };

/****************** Line (extends Shape) **********************/

function Line(parent, start, end) {

    this.instance = parent.pathItems.add();
    // [ [startX, startY], [endX, endY] ]
    this.instance.setEntirePath([start,end]);

}

Line.prototype = new Shape();

/****************** Eyelet (extends Shape) **********************/

function Eyelet(parent, position) {
    this.instance = new Group("Eyelet", parent);
    var whiteCross = new Group("White", this.instance);
    var blackCross = new Group("Black", this.instance);

    var build = function(group, color, width) {
        var vertical = new Line( group , [0 , 0] , [0 , 50] );
        vertical.setName("vertical");
        vertical.stroke(width, color);
        var horizontal = new Line( group , [0 , 50] , [50 , 0] );
        horizontal.setName("horizontal");
        horizontal.stroke(width, color);
    };

    build(whiteCross.instance, white, (3 * scale) );
    build(blackCross.instance, black, (1 * scale) );

    this.instance.position = position;

}

Eyelet.prototype = new Shape();

私が書くとき

var eyelet = new Eyelet(layer2, [10,10]);

私は得る

グループにはコンストラクタがありません

このコードを jslint で実行しましたが、これが機能しない理由がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

2

これが Adob​​e Illustrator にあるという事実関連していることがわかりました。GroupDan Breslau が提案したようにオブジェクトの名前を変更したところ、MyGroup期待どおりに機能しました。Illustrator にはGroup、問題を引き起こしているグローバル オブジェクトがあるようです。ご協力いただきありがとうございます。

于 2010-12-01T15:11:56.863 に答える