アプリ版:「スタンプのみでお礼する」機能のリリースについて

Adobe Illustrator のスクリプティング処理のうち、スクリプト実行時に作成した新規ドキュメント上での処理についての質問です。バージョンは CS5 です。

jsx で以下の処理を組もうとしています。

(1) アクティブドキュメントを検索し、任意の要素を選択
(2) (1)をコピーしたオブジェクトを作成
(3) 新規ドキュメントを作成
(4) (2)を(3)に移動
(5) (3)に移動した(2)を取得(選択)
(6) (5)の位置を変更
(7) (6)を外部ファイルに保存
(8) (6)を閉じる

(5)で新規ドキュメントのpageItems配列の0番目(コピーした要素)にアクセスした瞬間にレスポンスが返ってこなくなり、固まってしまいます。仕方なく、毎回イラストレータを落とします。
(5)(6)の工程を抜くと、他の処理は全体を通してすべて正常に動きます。

アクティブドキュメントのループ処理中に作成した新規ドキュメント上にコピーした要素のプロパティは触ることができないのでしょうか…?また、上記を実現できる方法はありますか?

よろしくお願いします。

A 回答 (2件)

shut0325です。



簡単なコードを書いてテストしてみましたが、可能でした。

下記のコードでは、最初のアクティブドキュメント(BaseDoc)内の選択されたオブジェクトを新規ドキュメント(MyDoc)に複製し、100(ポイント)ピッチで、配置(移動)しています。

ちょっと引っかかった点としては

BaseDoc.activate();

この部分で、最初のアクティブドキュメントをアクティブにしないと、新規書類に対して何も処理してくれませんでした。

今回は各々で複製→複製先で移動とやっていますが、元ドキュメントをアクティブにしてコピー(copy())→複製先ドキュメントをアクティブにしてペースト(paste())すると、選択は維持されたままになっているので、複製先でループ処理して移動、、、としてもいいと思います。


var BaseDoc = activeDocument;
var Mydoc = app.documents.add();

var mat = new Array;

BaseDoc.activate();

for (var i in BaseDoc.selection){
mat[i] = BaseDoc.selection[i].duplicate(Mydoc);
mat[i].position = [100*i,100];
}
    • good
    • 0
この回答へのお礼

お返事遅くなってすみません。
サンプルコードを元に色々やったらうまく動きました。
とても参考になりました、ありがとうございます!

お礼日時:2011/06/10 14:18

コードがないので、何が問題か良くわかりませんが、開始時のアクティブドキュメント及び新規ドキュメントは変数に格納していますでしょうか?



下記の様な感じです。

var docref = activeDocument;
var Mydoc = app.documents.add();

最初に宣言しておけば、後は、変数名を指定しての処理が進められます。

この回答への補足

ご回答ありがとうございます。

> コードがないので、何が問題か良くわかりませんが、開始時のアクティブドキュメント及び新規ドキュメントは変数に格納していますでしょうか?

はい、スクリプト実行時のアクティブドキュメントとスクリプト実行中に作成するドキュメントを区別するために、変数に格納しています。

以下のように新規ドキュメント上にコピーした画像の座標を(0,0)に移動させようとすると止まってしまいます。

//newDoc = 新規作成したドキュメント
//imgObj = コピーする画像オブジェクト
imgObj.moveToBeginning(newDoc);
newDoc.pageItems[0].translate(0, 0);

新規ドキュメントに画像をコピー後、画像の座標を操作するスクリプトを組むことはできるのでしょうか…?

補足日時:2011/06/06 14:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!