前回の続きです。Illustratorで指定した範囲内に選択した図形を納めるスクリプトです。GUIで指定された範囲内に選択した図形を入れますが、図形の幅が範囲を超えている場合はリサイズ(スケール変更)します。リサイズ、移動した際演算誤差などで、位置やサイズが若干ずれることがあります。
// 指定した範囲に選択された図形等をリサイズして入れる
(function(){
if (app.documents.length < 1){ return; }
var w = app.activeDocument.width; // 横幅
var h = app.activeDocument.height; // 縦幅
// 内包するオブジェクトを指定する
var targetObj = {
x1 : 0,
y1 : 0,
x2 : w,
y2 : h,
width : w,
height : h
}
// GUI部分
var winObj = new Window("dialog", "ページ内に納める", [0,0,320,200]);
var cropSize1 = winObj.add("statictext", [20, 10, 300, 25], "収める範囲を入れてください(単位pt)");
winObj.add("statictext", [30, 50, 60, 70], "左");
winObj.add("statictext", [170, 50, 180, 70], "上");
winObj.add("statictext", [30, 80, 60, 100], "右");
winObj.add("statictext", [170, 80, 180, 100], "下");
var x1e = winObj.add("edittext", [50, 50, 150, 70], targetObj.x1);
var y1e = winObj.add("edittext", [190, 50, 290, 70], targetObj.y1);
var x2e = winObj.add("edittext", [50, 80, 150, 100], targetObj.x2);
var y2e = winObj.add("edittext", [190, 80, 290, 100], targetObj.y2);
var btnExtend = winObj.add("button", [20, 130, 300, 155], "実行する");
var btnEnd = winObj.add("button", [20, 160, 300, 185], "終了する");
// ボタンにイベントを割り当てる
btnExtend.onClick = function(){
targetObj.x1 = parseFloat(x1e.text);
targetObj.y1 = parseFloat(y1e.text);
targetObj.x2 = parseFloat(x2e.text);
targetObj.y2 = parseFloat(y2e.text);
// 指定された範囲の幅を計算
targetObj.width = targetObj.x2 - targetObj.x1;
targetObj.height = targetObj.y2 - targetObj.y1;
adjust();
redraw(); // 再描画する
}
// ウィンドウを閉じる
btnEnd.onClick = function(){
winObj.close();
}
winObj.center();
winObj.show();
// 位置を調整する処理
function adjust(){
// 各種オブジェクトに対して処理を行う
for(var i=0; i<activeDocument.selection.length; i++){
toInnerSacle(activeDocument.selection[i], targetObj);
}
function toInnerSacle(selObj, targetObj){
// 図形の座標を読み出し
var rect = selObj.geometricBounds;
var srcX1 = rect[0];
var srcY1 = -rect[1];
var srcX2 = rect[2];
var srcY2 = -rect[3];
// 幅が範囲内より大きい場合にはサイズを縮小する
var sW = srcX2- srcX1;
var sH = srcY2 - srcY1;
if (sW > targetObj.width){
var s = (targetObj.width / sW) * 100;
selObj.resize(s, s);
}
if (sH > targetObj.height){
var s = (targetObj.height / sH) * 100;
selObj.resize(s, s);
}
// もう一度座標を読み出す
var rect = selObj.geometricBounds;
var srcX1 = rect[0];
var srcY1 = -rect[1];
var srcX2 = rect[2];
var srcY2 = -rect[3];
// ページX座標よりも小さい場合
if (srcX1 < targetObj.x1){
selObj.translate(targetObj.x1-srcX1, 0);
}
// ページX座標よりも大きい場合
if (srcX2 > targetObj.x2){
selObj.translate(targetObj.x2-srcX2, 0);
}
// ページY座標よりも小さい場合
if (srcY1 < targetObj.y1){
selObj.translate(0, -(targetObj.y1-srcY1));
}
// ページY座標よりも大きい場合
if (srcY2 > targetObj.y2){
selObj.translate(0, -(targetObj.y2-srcY2));
}
}
}
})();
【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/
>
初めて国立天文台 野辺山に行ってきました。中学生の頃とか天文関係の仕事につきたかったけど、「天文関係の人は貧乏だからやめたほうがいい」という先生だったかのアドバイスを受けて、就職先がリサイクル業者に。
で、ようやく30年越しくらいに初めて天文台に行ったわけです。受付に行くとスタンプを押すための使用済みの紙が置いてありました。スタンプを押した後に裏返すと、そこにはどこかで見たようなプログラミング言語が。
見たようなといっても、一般的なC/C++言語やJava言語ではありません。
「うわ、PostScriptだ」
懐かしの(?)ページ記述言語であるPostScriptが書かれてました。全部の紙を集めればいろいろ分かるのでしょうが、一枚の紙から分かるのは、EPTonerとあるのでプリンタはHPかも(でもfalseとあるので、これ以外なのか)。
使用している紙の種類としてはA4サイズ(これはPageBoundingBoxに書かれてた)。使用しているマシンはWinNTの文字があるのでMacではなくWindows NT系。Windows XP/2003 Server(この可能性は薄いかも)。
Windows 7/8.1(8.x系の可能性は低そう)、まあWindows XPを使用といったところか。ハガキ大サイズなので、このくらいしか分からず(もっと詳しい人が見れば、もう少し分かるかも)。
話は変わって、Egison言語は日本の人が作った言語だそうです。Ruby言語波にメジャーになるかどうかはわかりませんが、とりあえず勉強がてらいつものページを作ってみました。まあ、()の世界なのでLISPと言われれば、そんなところなのかも。まだ、一日も使ってないので詳細分からないので、本当にそうなのかは分かりませんが。
・Egison言語
< http://www.egison.org/
>
・Egison言語 例文辞典
< http://www.openspc2.org/reibun/Egison/3.3.2/
>
・データビジュアライゼーションのためのD3.js徹底入門
< http://www.amazon.co.jp/dp/4797368861
>
・D3.js例文辞典
< http://www.openspc2.org/reibun/D3.js/
>
・ExtendScript Toolkit(ESTK)基本編
< http://www.amazon.co.jp/dp/B00JUBQKKY/
>
・4K/ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>
・JavaScript逆引きハンドブック
< http://www.amazon.co.jp/dp/4863541082
>
・Adobe JavaScriptリファレンス
< http://www.amazon.co.jp/dp/4844395955
>
・Nexus 7(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus7/
>
・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/
>
・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< https://www.ddc.co.jp/estore/cgi/item/start.cgi?m=DetailViewer&record_id=243
>
吉田印刷所の「印刷の泉」でも購入できるようになりました。
(function(){
if (app.documents.length < 1){ return; }
var w = app.activeDocument.width; // 横幅
var h = app.activeDocument.height; // 縦幅
// 内包するオブジェクトを指定する
var targetObj = {
x1 : 0,
y1 : 0,
x2 : w,
y2 : h,
width : w,
height : h
}
// GUI部分
var winObj = new Window("dialog", "ページ内に納める", [0,0,320,200]);
var cropSize1 = winObj.add("statictext", [20, 10, 300, 25], "収める範囲を入れてください(単位pt)");
winObj.add("statictext", [30, 50, 60, 70], "左");
winObj.add("statictext", [170, 50, 180, 70], "上");
winObj.add("statictext", [30, 80, 60, 100], "右");
winObj.add("statictext", [170, 80, 180, 100], "下");
var x1e = winObj.add("edittext", [50, 50, 150, 70], targetObj.x1);
var y1e = winObj.add("edittext", [190, 50, 290, 70], targetObj.y1);
var x2e = winObj.add("edittext", [50, 80, 150, 100], targetObj.x2);
var y2e = winObj.add("edittext", [190, 80, 290, 100], targetObj.y2);
var btnExtend = winObj.add("button", [20, 130, 300, 155], "実行する");
var btnEnd = winObj.add("button", [20, 160, 300, 185], "終了する");
// ボタンにイベントを割り当てる
btnExtend.onClick = function(){
targetObj.x1 = parseFloat(x1e.text);
targetObj.y1 = parseFloat(y1e.text);
targetObj.x2 = parseFloat(x2e.text);
targetObj.y2 = parseFloat(y2e.text);
// 指定された範囲の幅を計算
targetObj.width = targetObj.x2 - targetObj.x1;
targetObj.height = targetObj.y2 - targetObj.y1;
adjust();
redraw(); // 再描画する
}
// ウィンドウを閉じる
btnEnd.onClick = function(){
winObj.close();
}
winObj.center();
winObj.show();
// 位置を調整する処理
function adjust(){
// 各種オブジェクトに対して処理を行う
for(var i=0; i<activeDocument.selection.length; i++){
toInnerSacle(activeDocument.selection[i], targetObj);
}
function toInnerSacle(selObj, targetObj){
// 図形の座標を読み出し
var rect = selObj.geometricBounds;
var srcX1 = rect[0];
var srcY1 = -rect[1];
var srcX2 = rect[2];
var srcY2 = -rect[3];
// 幅が範囲内より大きい場合にはサイズを縮小する
var sW = srcX2- srcX1;
var sH = srcY2 - srcY1;
if (sW > targetObj.width){
var s = (targetObj.width / sW) * 100;
selObj.resize(s, s);
}
if (sH > targetObj.height){
var s = (targetObj.height / sH) * 100;
selObj.resize(s, s);
}
// もう一度座標を読み出す
var rect = selObj.geometricBounds;
var srcX1 = rect[0];
var srcY1 = -rect[1];
var srcX2 = rect[2];
var srcY2 = -rect[3];
// ページX座標よりも小さい場合
if (srcX1 < targetObj.x1){
selObj.translate(targetObj.x1-srcX1, 0);
}
// ページX座標よりも大きい場合
if (srcX2 > targetObj.x2){
selObj.translate(targetObj.x2-srcX2, 0);
}
// ページY座標よりも小さい場合
if (srcY1 < targetObj.y1){
selObj.translate(0, -(targetObj.y1-srcY1));
}
// ページY座標よりも大きい場合
if (srcY2 > targetObj.y2){
selObj.translate(0, -(targetObj.y2-srcY2));
}
}
}
})();
【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/
>
初めて国立天文台 野辺山に行ってきました。中学生の頃とか天文関係の仕事につきたかったけど、「天文関係の人は貧乏だからやめたほうがいい」という先生だったかのアドバイスを受けて、就職先がリサイクル業者に。
で、ようやく30年越しくらいに初めて天文台に行ったわけです。受付に行くとスタンプを押すための使用済みの紙が置いてありました。スタンプを押した後に裏返すと、そこにはどこかで見たようなプログラミング言語が。
見たようなといっても、一般的なC/C++言語やJava言語ではありません。
「うわ、PostScriptだ」
懐かしの(?)ページ記述言語であるPostScriptが書かれてました。全部の紙を集めればいろいろ分かるのでしょうが、一枚の紙から分かるのは、EPTonerとあるのでプリンタはHPかも(でもfalseとあるので、これ以外なのか)。
使用している紙の種類としてはA4サイズ(これはPageBoundingBoxに書かれてた)。使用しているマシンはWinNTの文字があるのでMacではなくWindows NT系。Windows XP/2003 Server(この可能性は薄いかも)。
Windows 7/8.1(8.x系の可能性は低そう)、まあWindows XPを使用といったところか。ハガキ大サイズなので、このくらいしか分からず(もっと詳しい人が見れば、もう少し分かるかも)。
話は変わって、Egison言語は日本の人が作った言語だそうです。Ruby言語波にメジャーになるかどうかはわかりませんが、とりあえず勉強がてらいつものページを作ってみました。まあ、()の世界なのでLISPと言われれば、そんなところなのかも。まだ、一日も使ってないので詳細分からないので、本当にそうなのかは分かりませんが。
・Egison言語
< http://www.egison.org/
>
・Egison言語 例文辞典
< http://www.openspc2.org/reibun/Egison/3.3.2/
>
・データビジュアライゼーションのためのD3.js徹底入門
< http://www.amazon.co.jp/dp/4797368861
>
・D3.js例文辞典
< http://www.openspc2.org/reibun/D3.js/
>
・ExtendScript Toolkit(ESTK)基本編
< http://www.amazon.co.jp/dp/B00JUBQKKY/
>
・4K/ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>
・JavaScript逆引きハンドブック
< http://www.amazon.co.jp/dp/4863541082
>
・Adobe JavaScriptリファレンス
< http://www.amazon.co.jp/dp/4844395955
>
・Nexus 7(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus7/
>
・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/
>
・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< https://www.ddc.co.jp/estore/cgi/item/start.cgi?m=DetailViewer&record_id=243
>
吉田印刷所の「印刷の泉」でも購入できるようになりました。