2011年8月16日火曜日

竹とんぼを改変

勉強会に向けて良質な勉強用のサンプルスクリプトが見つからなかった。
そういえば、せうぞーさんが最初に作ったスクリプトは「糸トンボ」だった(本人談)話を思い出し、たけうちさんの30)InDesignトンボ(別名:竹とんぼ)を見て改変(改竄?)した記録。読み解けなかったところが多々あったけど、とりあえず動いたからOKか?

読んでて思ったのはもの凄い高度なことをしてトンボを作成してるなってこと。ほとんどガクブルの世界です。それでも、塗り足しを含んだ絵柄にトンボを付ける時はどうするの? 当然、縮小して貼るわけだからトンボの数値は3ミリじゃないよね。なんてことを思いまして、ドブを含んだ絵柄にトンボを付けて見ました。

緑部分は変えたとこ。最初にミリ設定をしてるのは、ポイント設定の画面だとポイント数値で作成されてしまうから。またセンタートンボのサークルは塗りが反映されるため削除しました。


//########################
//塗り足しを含んだ選択ボックスにトンボをつける
//塗りたし数値は可変のため入力
//たけうちとおるさんのスクリプトの改変
//########################

//環境設定の単位をミリにする
app.activeDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.millimeters;
app.activeDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.millimeters;

//ドブの数値
var dobu = prompt("塗り足しの数値を入力するのだ","");


lineW=0.05;
var myAry=new Array();
selObj = app.activeDocument.selection;
//var myspread = app.activeWindow.activeSpread;
if(selObj.length < 1){
alert("オブジェクトを選択してください。");
}else{
var myRegistrationColor = app.activeDocument.colors.item("Registration");

X1 = selObj[0].geometricBounds[1];
Y1 = selObj[0].geometricBounds[0];
X2 = selObj[0].geometricBounds[3];
Y2 = selObj[0].geometricBounds[2];
W=X2-X1;
H=Y2-Y1;

//左上横トンボ
myAry[0]=drowLine(X1,X1-10,Y1,Y1,lineW,myRegistrationColor);

//線の複製
myAry[1]=myAry[0].duplicate(undefined,[0,(dobu) ]);

//左上縦トンボ
myAry[2]=drowLine(X1,X1,Y1-10,Y1,lineW,myRegistrationColor);
myAry[3]=myAry[2].duplicate(undefined,[(dobu),0 ]);

//上センター
myAry[4]=drowLine(X1+W/2,X1+W/2,Y1-10,Y1,lineW,myRegistrationColor);
myAry[5]=drowLine(X1+W/2-5,X1+W/2+5,Y1-4,Y1-4,lineW,myRegistrationColor);

//右上
myAry[6]=drowLine(X2,X2+10,Y1,Y1,lineW,myRegistrationColor);
myAry[7]=myAry[6].duplicate(undefined,[0,(dobu) ]);
myAry[8]=drowLine(X2,X2,Y1-10,Y1,lineW,myRegistrationColor);
myAry[9]=myAry[8].duplicate(undefined,[-(dobu),0 ]);
//左センター
myAry[10]=drowLine(X1-10,X1,Y1+H/2,Y1+H/2,lineW,myRegistrationColor);
myAry[11]=drowLine(X1-4,X1-4,Y1+H/2-5,Y1+H/2+5,lineW,myRegistrationColor);
//右センター
myAry[12]=drowLine(X2,X2+10,Y1+H/2,Y1+H/2,lineW,myRegistrationColor);
myAry[13]=drowLine(X2+4,X2+4,Y1+H/2-5,Y1+H/2+5,lineW,myRegistrationColor);
//左下
myAry[14]=drowLine(X1-10,X1,Y2,Y2,lineW,myRegistrationColor);
myAry[15]=myAry[14].duplicate(undefined,[0,-(dobu) ]);
myAry[16]=drowLine(X1,X1,Y2+10,Y2,lineW,myRegistrationColor);
myAry[17]=myAry[16].duplicate(undefined,[(dobu),0 ]);

//下センター
myAry[18]=drowLine(X1+W/2,X1+W/2,Y2+10,Y2,lineW,myRegistrationColor);
myAry[19]=drowLine(X1+W/2-5,X1+W/2+5,Y2+4,Y2+4,lineW,myRegistrationColor);
//右下
myAry[20]=drowLine(X2,X2+10,Y2,Y2,lineW,myRegistrationColor);
myAry[21]=myAry[20].duplicate(undefined,[0,-(dobu) ]);
myAry[22]=drowLine(X2,X2,Y2+10,Y2,lineW,myRegistrationColor);
myAry[23]=myAry[22].duplicate(undefined,[-(dobu),0 ]);

app.activeWindow.activeSpread.groups.add(myAry);
}
function drowLine(X1,X2,Y1,Y2,lineW,myRegistrationColor){
myLine=app.activeWindow.activeSpread.rectangles.add();
myLine.paths.item(0).entirePath=[[X1,Y1],[X2,Y2]];
//myLine.filled=false;//CS2未サポート
//myLine.stroked=true;//CS2未サポート
myLine.strokeWeight=lineW;
myLine.strokeColor=myRegistrationColor;
return myLine;
}

2 件のコメント:

  1. こんにちは、このスクリプトはjs書きはじめの頃に作ったもので、単位を考えていなかったりと、出来の悪いスクリプトでご迷惑をおかけしています。ですのでこのように直してもらえると助かります。

    返信削除
  2. ご迷惑だなんてとんでもない。初心者にとって非常に取っ付き易い良スクリプトでした。熟練者の考える良スクリプトと初心者が感じる良スクリプトは違うと思います。

    初心者にとっては(ここをこうしたらどうだろう?)といったイメージが生まれやすい、かつ入門書を片手に何とかなる。

    この2点を満たしたものが良スクリプトなのです。

    完成度が高く、かつ拡張性がイメージできないものは、初心者にとって良スクリプトではないのです。

    全部、読み解けたわけではありませんが、非常に勉強になりました。ありがとうございます。

    返信削除