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

投稿:  著者:



今回も前回と同様、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; } // キャンセルされた
var offsetW=prompt("横の間隔を指定してください",0);
if(!offsetW){ return; } // キャンセルされた
var offsetH=prompt("縦の間隔を指定してください",0);
if(!offsetH){ return; } // キャンセルされた
repW=parseInt(repW); // 数値に変換
repH=parseInt(repH); // 数値に変換
offsetW=parseInt(offsetW);
offsetH=parseInt(offsetH);
var mtx=app.getScaleMatrix(-100,100);
for(var j=0; j<repH; j++){
for(var i=0; i<repW; i+=2){
var w=basePattern.width+offsetW;
var h=basePattern.height+offsetH;
var dup=basePattern.duplicate();
dup.left=basePattern.left+w*i;
dup.top=basePattern.top-h*j;
var dup=basePattern.duplicate();
dup.transform(mtx,false,true,false,false,false);
dup.left=basePattern.left+w*i+w;
dup.top=basePattern.top-h*j;
}
}
basePattern.remove();
})();

左右だけでなく上下も反転させる場合は、以下のようになります。

// リピート機能 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("横の間隔を指定してください",0);
if(!offsetW){ return; } // キャンセルされた
var offsetH=prompt("縦の間隔を指定してください",0);
if(!offsetH){ return; } // キャンセルされた
repW=parseInt(repW); // 数値に変換
repH=parseInt(repH); // 数値に変換
offsetW=parseInt(offsetW);
offsetH=parseInt(offsetH);
var flipH=-100;
var flipV=100;
for(var j=0; j<repH; j++){
if(j&1){
flipV=-100;
}else{
flipV=100;
}
for(var i=0; i<repW; i++){
if(i&1){
flipH=-100;
}else{
flipH=100;
}
var mtx=app.getScaleMatrix(flipH,flipV);
var w=basePattern.width+offsetW;
var h=basePattern.height+offsetH;
var dup=basePattern.duplicate();
dup.transform(mtx,false,true,false,false,false);
dup.left=basePattern.left+w*i;
dup.top=basePattern.top-h*j;
}
}
basePattern.remove();
})();

上下左右方向にゆらぎを加える場合は、以下のようになります。

// リピート機能 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("横の間隔を指定してください",0);
if(!offsetW){ return; } // キャンセルされた
var offsetH=prompt("縦の間隔を指定してください",0);
if(!offsetH){ return; } // キャンセルされた
var f=prompt("ゆらぎ範囲を入れてください",10.5);
if(!f){ return; } // キャンセルされた
repW=parseInt(repW); // 数値に変換
repH=parseInt(repH); // 数値に変換
offsetW=parseInt(offsetW);
offsetH=parseInt(offsetH);
f=parseFloat(f); // 小数も使用可能に
var flipH=-100;
var flipV=100;
for(var j=0; j<repH; j++){
if(j&1){
flipV=-100;
}else{
flipV=100;
}
for(var i=0; i<repW; i++){
if(i&1){
flipH=-100;
}else{
flipH=100;
}
var mtx=app.getScaleMatrix(flipH,flipV);
var w=basePattern.width+offsetW;
var h=basePattern.height+offsetH;
var dup=basePattern.duplicate();
dup.transform(mtx,false,true,false,false,false);
dup.left=basePattern.left+w*i+Math.random()*f;
dup.top=basePattern.top-h*j+Math.random()*f;
}
}
basePattern.remove();
})();

さらに回転ゆらぎも加える場合は、以下のようになります。

// リピート機能 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("横の間隔を指定してください",0);
if(!offsetW){ return; } // キャンセルされた
var offsetH=prompt("縦の間隔を指定してください",0);
if(!offsetH){ return; } // キャンセルされた
var f=prompt("ゆらぎ範囲を入れてください",10.5);
if(!f){ return; } // キャンセルされた
var rot=prompt("回転のゆらぎ範囲を入れてください",360);
if(!rot){ return; } // キャンセルされた
repW=parseInt(repW); // 数値に変換
repH=parseInt(repH); // 数値に変換
offsetW=parseInt(offsetW);
offsetH=parseInt(offsetH);
f=parseFloat(f); // 小数も使用可能に
rot=parseFloat(rot); // 小数も使用可能に
var flipH=-100;
var flipV=100;
for(var j=0; j<repH; j++){
if(j&1){
flipV=-100;
}else{
flipV=100;
}
for(var i=0; i<repW; i++){
if(i&1){
flipH=-100;
}else{
flipH=100;
}
var mtx=app.getScaleMatrix(flipH,flipV);
var w=basePattern.width+offsetW;
var h=basePattern.height+offsetH;
var dup=basePattern.duplicate();
dup.transform(mtx,false,true,false,false,false);
dup.left=basePattern.left+w*i+Math.random()*f;
dup.top=basePattern.top-h*j+Math.random()*f;
dup.rotate(Math.random()*rot);
}
}
basePattern.remove();
})();


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


大河ドラマ「青天を衝け」、このタイトル見た時に頭にうかんだのは、どらえもんの「天つき地蔵」。
https://dic.pixiv.net/a/天つき地蔵


まあ、タイムスリップしたどらえもんが、元の世界に戻るために天をつくという話なんですが、渋沢栄一が天をつつくと金が降ってくるという、謎の大河ドラマが思い浮かんでしまったわけで……。

天をつつくよりも、政府をつつくと10万円が降ってくるというようなオチは、もうないですかねぇ……。

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


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


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