オブジェクトを拡大・縮小する方法は、resize関数を使ったり、メニューコマンドを使ったりいろいろあります。
resize
オブジェクトを拡大縮小する
obj.resize(50,50);
obj.resize ( 120, 120, true, true, true, true, 120, Transformation.CENTER );
引数1 | scaleX | 横の拡大縮小率。%指定(0より大きい数) |
引数2 | scaleY | 縦の拡大縮小率。%指定(0より大きい数) |
引数3 | changePositions [省略可] |
オブジェクトの変形(true、false)デフォルトはtrue |
引数4 | changeFillPatterns [省略可] |
パターンの変形(true、false)デフォルトはtrue |
引数5 | changeFillGradients [省略可] |
グラデーションの変形(true、false)デフォルトはtrue |
引数6 | changeStrokePattern [省略可] |
線のパターンの変形(true、false)デフォルトはtrue |
引数7 | changeLineWidths [省略可] |
線幅と効果も拡大縮小。%指定(0より大きい数) デフォルト100%。 |
引数8 | scaleAbout [省略可] |
基準位置(以下のどれかを指定)デフォルトはTransformation.CENTER (図形の中心)
Transformation.BOTTOM (下) |
省略する場合は線幅・効果に要注意
7番目の引数「線幅と効果も拡大縮小」はデフォルトだと100%=線幅・効果は変化しないになってしまうので、線や効果のある図形だと印象が変わってしまいます。
なんでここだけパーセント指定なんでしょうね。true/falseで、デフォルトtrueでよかったのに。線幅・効果だけ別パーセントにするケースがどれだけあるのでしょうか。
true/falseでも動作はしました。
数値変換されtrueは1に、falseは0になります。trueは1%なので異様に細い線に、falseの0は変化なしでした。
とにかく、うっかり resize(50,50); などと、省略してしまうと意図しない結果になりますので要注意です。目的にもよりますが多くの場合は、1、2、7番目と同じ倍率を入れなきゃかと思います。省略の意味ねぇ。
拡大縮小率の範囲
1、2、7番目の引数の拡大縮小率に制限はあるのか、と。
元のオブジェクトの大きさにもよるのでどこからどこまでは大丈夫とか言えませんが、極端な数字にはご注意ください。以下、実験結果。
0を指定はやめた方がいい
拡大縮小率は0も指定できたのですが、一カ所にすべてのアンカーポイントが集まったみたいな状態になりました。ポイントの数や塗りや線の色は保持されていますが、何も見えません。拡大しても、状態はかわりません。孤立点のようですが、孤立点の選択では選択されず、よくわからんオブジェクトになったので、危険と判断します。
0.001などの0に近い数字も危険
0.001など、0に近い数でも同様の状態になりました。こちらは拡大すれば見えるようになりましたので、Illustratorの最大表示率でも見えないほど小さい、ということかと思います。
しかし、円で実験してみたのですが、拡大した円がなんか歪になってますよ!ハンドルの位置とかの誤差の範囲が極端な拡大縮小を経ることで目視できる範囲になったということかと推測します。別にスクリプトに限らなさそうですが、極端な倍率での拡大縮小はやめた方がよさそうです。
大きいのもどこまでも作成できるっぽいけど
大きいのは作業領域(アートボードのまわりのグレーの領域)をはみ出しても作成されますが、作業領域外のオブジェクトは扱いが微妙になってしまうので、ほどほどの大きさにしておくのが無難です。
位置の変更→オブジェクトの変形
3つめの引数、changePositions。最初は直訳して位置の変更って何だ? falseにしたら拡大も縮小もしなくなっちゃいましたので、何のためにあるのか謎でしたが、わかりました。あれですよ。パターンだけ拡大縮小する時の、拡大縮小パネルの「オブジェクトの変形」ですよ。というわけで、言葉を変えました。これなら特に説明は不要のはず。
サイズを指定
横幅、縦幅を指定(単位はpt)。線幅・効果を含まない。左上基準にサイズ変更。マイナスを指定するとエラー。
Obj.width = 100;
Obj.height = 50;
メニューから変形を実行
メニューを実行します。メニュー同様ダイアログが出て諸々ユーザーが設定します。CS6以降で動作します。
変形>拡大・縮小…
app.executeMenuCommand("transformscale");
変形>個別に変形…
app.executeMenuCommand("Transform v23");
マトリクスによる拡大縮小
オブジェクトには変形情報を保存してるマトリクスというモノがあって、そこの情報を書き換えることで変形ができるのだそうな。
マトリクスによる拡大縮小(線幅も拡大縮小)
var tMatrix = app.getTranslationMatrix(0, 0);
var mtx = concatenateScaleMatrix(tMatrix, 50, 50);
obj.transform(mtx);
引数1 | matrix | 基本となるマトリクス |
引数2 | scaleX | 横の拡大縮小率。%指定(0より大きい数) |
引数3 | scaleY | 縦の拡大縮小率。%指定(0より大きい数) |