クリエイター手抜きプロジェクト[650]Illustrator CS6〜2020編 Illustrator 2021のリピート機能をスクリプトで実現する
── 古籏一浩 ──

投稿:  著者:



今回は、2021のリピート機能をスクリプトで実現するというネタです。ただ、全部を実現するというのは文字数の都合上無理があるので、とりあえず手軽にできる部分からです。

最初から無理に全部作ろうとしたりすると失敗する可能性が高いので、簡単にできるものから少しずつ作っていくのが無難です。

まずは、簡単な上下左右の繰り返し(リピート)処理からです。スクリプトは以下のようになります。リピート機能を実現する、もっとも簡単なスクリプトになります。

基本というか、ベースになるわけです。これをベースにして、機能を拡張していけばよいでしょう。スクリプトの修正などは、自由に行ってもらって構いません。

使い方ですが、リピートさせる図形を一つだけ選択します。複雑な図形の場合は、グループ化してから実行すれば、一つの図形とみなされ処理されます。

スクリプトを実行すると、横と縦の繰り返し数を入力するダイアログが表示されます。入力すれば、後は自動的に指定した数だけ、図形がリピートして配置されます。





// リピート機能 for Illustrator CS6〜2020
(function(){
var sel=app.selection;
if(sel.length != 1){
alert("繰り返し図形を1つだけ選択してください");
return;
}
var basePattern=sel[0];
var repW=prompt("横の繰り返し数を入れてください",8);
if(!repW){ return; } // キャンセルされた
var repH=prompt("縦の繰り返し数を入れてください",8);
if(!repH){ return; } // キャンセルされた
repW=parseInt(repW); // 数値に変換
repH=parseInt(repH); // 数値に変換
for(var j=0; j<repH; j++){
for(var i=0; i<repW; i++){
var dup=basePattern.duplicate();
dup.left=basePattern.left+basePattern.width*i;
dup.top=basePattern.top-basePattern.height*j;
}
}
basePattern.remove();
})();

なお、ベースとなる選択した図形は削除されます。削除したくない場合は、最後の方にある

basePattern.remove();

の行を削除してください。以後のスクリプトも同様です。

次に、図形と図形の間隔を指定できるバージョンです。上のスクリプトでは、入力するのは横と縦の繰り返し数だけでしたが、今度は横と縦の間隔も入力します。なお、数値の単位はpoint(pt/ポイント)です。


// リピート機能 for Illustrator CS6〜2020
// 間隔を指定できるバージョン
(function(){
var sel=app.selection;
if(sel.length != 1){
alert("繰り返し図形を1つだけ選択してください");
return;
}
var basePattern=sel[0];
var repW=prompt("横の繰り返し数を入れてください",8);
if(!repW){ return; } // キャンセルされた
var repH=prompt("縦の繰り返し数を入れてください",8);
if(!repH){ return; } // キャンセルされた
var offsetW=prompt("横の間隔を指定してください",-10);
if(!offsetW){ return; } // キャンセルされた
var offsetH=prompt("縦の間隔を指定してください",-10);
if(!offsetH){ return; } // キャンセルされた
repW=parseInt(repW); // 数値に変換
repH=parseInt(repH); // 数値に変換
offsetW=parseInt(offsetW);
offsetH=parseInt(offsetH);
for(var j=0; j<repH; j++){
for(var i=0; i<repW; i++){
var dup=basePattern.duplicate();
dup.left=basePattern.left+(basePattern.width+offsetW)*i;
dup.top=basePattern.top-(basePattern.height+offsetH)*j;
}
}
basePattern.remove();
})();

間隔を指定できる単位がptだけでは不便だ、という人もいるでしょう。Illustratorは内部では全部ptで計算するため、ptで指定した方が誤差は少なくなります。単位を変換すると、どうしても誤差が発生し、さらに今回のような繰り返し処理では誤差が発生しやすくなります。

それでもmmやcmなどの単位を指定したいというのであれば、以下の2行を下記のように変更してください。これで、間隔を2mmや1.56cmという単位付きの数値で、指定できるようになります。

offsetW=parseInt(offsetW);
offsetH=parseInt(offsetH);
    ↓
offsetW=(UnitValue(offsetW)).as("pt");
offsetH=(UnitValue(offsetH)).as("pt")

一度ベースができれば、あとは応用です。2021の機能にはありませんが、少しずつ図形を回転させる機能を追加することもできます。以下のスクリプトは、一回あたりの回転角度を指定できます。文字などに適用すると、結構面白い効果が得られます。

// リピート機能 for Illustrator CS6〜2020
// 間隔と回転角度を指定できるバージョン
(function(){
var sel=app.selection;
if(sel.length != 1){
alert("繰り返し図形を1つだけ選択してください");
return;
}
var basePattern=sel[0];
var repW=prompt("横の繰り返し数を入れてください",8);
if(!repW){ return; } // キャンセルされた
var repH=prompt("縦の繰り返し数を入れてください",8);
if(!repH){ return; } // キャンセルされた
var offsetW=prompt("横の間隔を指定してください",10);
if(!offsetW){ return; } // キャンセルされた
var offsetH=prompt("縦の間隔を指定してください",0);
if(!offsetH){ return; } // キャンセルされた
var degree=prompt("一回あたりの回転角度を指定してください",10);
if(!degree){ return; } // キャンセルされた
repW=parseInt(repW); // 数値に変換
repH=parseInt(repH); // 数値に変換
offsetW=parseInt(offsetW);
offsetH=parseInt(offsetH);
degree=parseInt(degree);
for(var j=0; j<repH; j++){
for(var i=0; i<repW; i++){
var dup=basePattern.duplicate();
dup.left=basePattern.left+(basePattern.width+offsetW)*i;
dup.top=basePattern.top-(basePattern.height+offsetH)*j;
dup.rotate(i*degree);
}
}
basePattern.remove();
})();

少しずつ回転させるのではなく、0〜入力した角度までランダムに回転させるには、以下の行を変更してください。

dup.rotate(i*degree);
  ↓
dup.rotate(Math.random()*degree);


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


いくつかスターターキットやデバイスを購入したものの、数か月未開封。ひどいのは一年半未開封というものも……。

一昨年、エアコンを制御しようと制御デバイスを買ったけど、昨年も未開封のままで、下手すると今年も未開封で終わってしまうかも。まあ、そうならないように時間を作っていかないといけないんですが……。

IT・コンピューター関係とは違って、体を使う仕事は物理的な時間がどうしても必要なので、どうしようもないというのはあります。

今年は予想以上に桜の開花が早くて、撮影は挫折気味。塩尻市あたりだと例年なら4月17日頃に満開になりますが、4月3日の時点で満開、すでに散り始めていたりします。このテキストが目にとまる頃には、すでに散ってしまっているかもしれません。

それでもちょっとした時間の合間に、スマホの8Kカメラで撮影しました。8K映像が再生できる環境となると限られますが、MacBook Pro(M1 Chip)とか、Mac mini(M1 Chip)なら、再生できるのではないかと思います。

桜だけでなく水芭蕉なども撮影しました。いずれもYouTubeにアップしてありますので、ぼけ〜っと眺めたい方はどうぞ。

・桜




・カタクリ



・水芭蕉




・横川渓谷 蛇石





滝とかも撮影に行きたいのですけど、なかなか時間が……。

会社で雇っていたアルバイトが、副業禁止規定のおかげで辞めるはめに。今どき副業禁止なの? みたいな感じもしましたが、規定は規定(日本で有数の巨大な会社のせいかもしれませんが)。仕方ないので、アルバイトの分も私がやる状態に……。

・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram


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


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