ふわふわぷかぷか

javaって何?から始めた初心者のandroidアプリ開発メモ。でも最近はイラレにはまってます。

【Illustratorスクリプト】ビル作り放題なスクリプト。

Windows10、CS4

イラストレーターでビルを作り放題になれるスクリプトです。

f:id:fuwafuwapukapuka:20180723224932j:plain

ビルの素材を作ろうと思って、まずはスクリプトを作るところから始めてしまい、そろそろ自分がどこに向かっているか分からなくなってきました。元言語聴覚士のふわぷかです。言語聴覚士知名度上がれ~

横の窓の数・縦の窓の数・マージン・間隔を指定することで、選択しているオブジェクトの内側に正方形を窓っぽく並べてくれます。マージンは選択している図形の左上・右上からの距離、間隔は窓同士の間隔です。(下図参照)

f:id:fuwafuwapukapuka:20180723225646p:plain

 

※オブジェクトを選択後、スクリプトを実行します。

※2つ以上のグループまたはオブジェクトを選択している場合は動かないようになっています。

細かいチェックはしていません。このスクリプト を使用して問題が起きた場合責任は負いません。

 ↓こんな感じで使います。

 

これにアピアランスを組み合わせたら最強だと思います!

 

ビルだけでなく、横に〇個、縦に〇個正方形を敷き詰めたいとかにも使えます!

窓は横幅に合わせるようになっているので、縦が元の四角より長い場合ははみ出します。

f:id:fuwafuwapukapuka:20180726212302p:plain → f:id:fuwafuwapukapuka:20180726212318p:plain

 

今回のスクリプトを使っていくつかフリー素材を作りました。

f:id:fuwafuwapukapuka:20180726212700j:plain

イラストACから無料でダウンロードできます。(jpeg/png/AI)

昼のビルの街並みの風景_飛行機イラスト/無料イラストなら「イラストAC」

上で紹介した窓のアピアランスもグラフィックスタイルに登録してあります。

他にも昼・夕方・夜・隕石落下・クールな感じがあります。(グラフィックスタイルは昼のみに入っています。)

右下のふわぷかの文字は無添加豆腐さんです。

 

以下ソースコードです。

#target "illustrator"  
  
	//選択中のオブジェクトを取得
		var sel = app.activeDocument.selection;

	//1個の場合のみ動作
		if(sel.length == 1){
			
		function setRGBColor(r,g,b){
			var tmpColor = new RGBColor();
			tmpColor.red = r;
			tmpColor.green = g;
			tmpColor.blue = b;
			return tmpColor;
			}
	
//動作	
	function make(){
		var n =  parseInt(number.text);
		var n =  parseInt(number.text);
		var l =  parseInt(length.text);
		var m =  parseFloat(margin.text);
		var inter =  parseFloat(interval.text);
		var ww = (w-2*m-(n-1)*inter)/n;

//窓を描画
		docObj = activeDocument.activeLayer;
		square = docObj.pathItems.rectangle(y1-m,x1+m,ww,ww);
		square.filled = true; // 塗りあり
		square.stroked = false; // 線なし
		square.fillColor = setRGBColor(130,200,240);


	//複製
		for (i=1; i<n; i++)
		{
		dpi = square.duplicate();
		dpi.translate(ww*[i]+inter*[i],0);
		}
	
		for (i2=1; i2<l; i2++)
		{			
				for (i=1; i<n+1; i++)
				{
				dpil = square.duplicate();
				dpil.translate(ww*[i-1]+inter*[i-1],(-ww-inter)*i2);
				}
		}
}
		
	//座標を取得
		var point = sel[0].visibleBounds;
		var x1 = point[0];
		var y1 = point[1];
		var x2 = point[2];
		var y2 = point[3];
		
		var w = x2-x1;

	//ダイアログを表示
		var dialog = new Window("dialog","窓の設定",[0,0,190,190]);
		

		dialog.add ("statictext", [10,20,60,40], "横の数");
		var number = dialog.add("edittext",[60,15,150,40],"3");//数の入力
		dialog.add ("statictext", [10,50,60,70], "縦の数");
		var length = dialog.add("edittext",[60,45,150,70],"4");//数の入力
		dialog.add ("statictext", [10,80,60,100], "マージン");
		var margin = dialog.add("edittext",[60,75,150,100],"5");//数の入力
		dialog.add ("statictext", [10,110,60,130], "間隔");
		var interval = dialog.add("edittext",[60,105,150,130],"5");//数の入力
		
		var btnOK = dialog.add("button",[10,140,80,170],"OK",{name:'ok'});//OK
		var btnCancel = dialog.add("button",[100,140,170,170],"cancel",{name:'cancel'});//CANCEL
		number.active = true;	//テキストエリアをフォーカスする
		
		dialog.onShow = function() {
			make();
			app.redraw(); //ドキュメントを再描画
			app.undo(); //アンドゥ
			}
		number.onChanging  = function(){
			make();
			app.redraw(); //ドキュメントを再描画
			app.undo(); //アンドゥ
			}
		length.onChanging  = function(){
			make();
			app.redraw(); //ドキュメントを再描画
			app.undo(); //アンドゥ
			}
		margin.onChanging  = function(){
			make();
			app.redraw(); //ドキュメントを再描画
			app.undo(); //アンドゥ
			}
		interval.onChanging  = function(){
			make();
			app.redraw(); //ドキュメントを再描画
			app.undo(); //アンドゥ
			}
		

		
	//キャンセルの処理
		btnCancel.onClick = function(){ dialog.close(); }
		
	//OKの処理
		btnOK.onClick = function(){
		dialog.close(); //ダイアログを閉じる
		make();

	}

		dialog.center();//ウインドウ表示位置をモニターの中心に移動
		dialog.show();//作成したウインドウを表示

   };
//----[ここまで]----