クリエイター手抜きプロジェクト[435]Adobe Illustrator CS5〜CC 2015編 座標(位置)だけ回転させる/古籏一浩

投稿:  著者:  読了時間:6分(本文:約2,600文字)


今回はIllustratorで選択された図形を回転させるスクリプトです。

回転といってもIllustratorの回転とは違い、図形の位置だけを回転させます。通常、Illustratorで図形を回転させると、図形の内容まで回転してしまいます。このスクリプトでは、ダイアログで入力した中心座標を基準にして、指定した角度だけ回転させることができます。



// 座標だけを回転させる
(function(){
if (app.documents.length < 1){ return; }
var selObj = app.activeDocument.selection;
if (selObj.length < 0){
alert("何か図形を選択してください");
return;
}
// 現在の座標値をオブジェクトに保存する
for(var i=0; i<selObj.length; i++){
selObj[i].oldX = selObj[i].left;
selObj[i].oldY = selObj[i].top;
}
// GUI部分
var winObj = new Window("dialog", "座標だけ回転", [0,0,480,210]);
winObj.add("statictext", [30, 10, 100, 30], "回転の中心X座標");
winObj.add("statictext", [170, 10, 250, 30], "回転の中心Y座標");
winObj.add("statictext", [310, 10, 380, 30], "回転角度");
var centerX = winObj.add("edittext", [50, 30, 150, 50], 0);
var centerY = winObj.add("edittext", [190, 30, 290, 50], 0);
var degree = winObj.add("edittext", [330, 30, 430, 50], 0);
var btnExec = winObj.add("button", [20, 70, 460, 95], "実行する");
var btnReset = winObj.add("button", [20, 100, 460, 125], "リセットする");
var btnPaperSet = winObj.add("button", [20, 130, 460, 155], "用紙の中央座標を設定する");
var btnEnd = winObj.add("button", [20, 160, 460, 185], "終了する");
// 終了ボタン
btnEnd.onClick = function(){
winObj.close();
}
// 実行ボタン
btnExec.onClick = function(){
var cx = parseFloat(centerX.text);
var cy = parseFloat(centerY.text);
var d = parseFloat(degree.text);
var rad = d * Math.PI / 180;
rotateObj(cx, cy, rad);
app.redraw();
}
// リセットボタン
btnReset.onClick = function(){
for(var i=0; i<selObj.length; i++){
selObj[i].left = selObj[i].oldX;
selObj[i].top = selObj[i].oldY;
}
app.redraw();
}
// 用紙の中央座標を設定
btnPaperSet.onClick = function(){
centerX.text = app.activeDocument.width/2;
centerY.text = app.activeDocument.height/2;
}
winObj.center();
winObj.show();
// 選択されたオブジェクトを回転させる
function rotateObj(cx, cy, rad){
for(var i=0; i<selObj.length; i++){
var x1 = selObj[i].oldX - cx;
var y1 = selObj[i].oldY + cy;
x = Math.cos(rad)*x1 - Math.sin(rad)*y1;
y = Math.sin(rad)*x1 + Math.cos(rad)*y1;
selObj[i].left = x + cx;
selObj[i].top = y - cy;
}
}
})();


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/ >

せっかくなので「2020年 盗用オリンピック」にしちゃうとか。それが駄目なら新たなものとして、オリンピック、パラリンピックに続くパクリンピックをやるというのはどうでしょう。

どのくらいの速さで、どこからパクったかを競う。選手に派食ったユニフォームを着てもらって100m走り、その間にどれが、どのくらい盗用されているかを調べる、と。400m走とか、1500m走とか。まあ、考えればいろいろな競技ができそう。

今年はお盆を休む会社が少なくて、結局8月16日だけが休みでした。こうなると、もう伝統的行事なんてできる人達が限られてくる感じがするなあ。


・Photoshop自動化基本編
< http://www.amazon.co.jp/dp/B00W952JQW/ >

・Illustrator自動化基本編
< http://www.amazon.co.jp/dp/B00R5MZ1PA >

・Adobe JavaScriptリファレンス
< http://www.amazon.co.jp/dp/B00FZEK6J6/ >

・ExtendScript Toolkit(ESTK)基本編
< http://www.amazon.co.jp/dp/B00JUBQKKY/ >

・データビジュアライゼーションのためのD3.js徹底入門
< http://www.amazon.co.jp/dp/4797368861 >

・4K/ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/ >

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/ >