Mod: Generative Design / P_1_0_01
Generative Designをしばらくやってみることにする.サンプルコードにはP,M,Aが接頭辞として付いているが, それぞれ.
- P:(Basic) Principles(基本原理)
- M:(Complex) Methods(複雑なメソッド)
- A:Appendix(付録)
のことらしい.みたところP→Aで進めれば良いようだ.書籍はコードを書いた後に読むようにしようと思う.
今回はPDFでプリントする関連のコードぽかったのでA4サイズに書き出せるようにコードを書き換えることにした.リファレンスのページを参考にした.ウィンドウサイズを変数を使って設定する場合はsettings()
の中でsize()
を指定する必要がある(Processing 3.Xからの変更).その際settings()
はsetup()
に書かなくても自動的に呼び出されるようだ.
PDF書き出しには2つ方法があるけど,今回のやり方のほうが汎用性が高いようだ.また,PDFで書き出す際に色がおかしかったので確認した所カラーモードの設定をbeginRecord()
の宣言後にしなくてはいけなかった.
コード
import processing.pdf.*; import java.util.Calendar; boolean savePDF = false; int dpi=72; float width_mm=210; float height_mm=297; int width_px=int(width_mm*0.03937*dpi); int height_px=int(height_mm*0.03937*dpi); void setup() { //settings(); colorMode(HSB, 360, 100, 100, 100); } void settings() { size(width_px, height_px); } void draw() { // save pdf - start if (savePDF) { beginRecord(PDF, timeStamp()+".pdf"); colorMode(HSB, 360, 100, 100, 100); } noCursor(); rectMode(CENTER); noStroke(); background(mouseY%360, 100, 100); for (float f = 1; f > 0; f -= 0.05) { float w = width * f; float h = height * f; fill((mouseY+f*180)%360, 100, 100); rect(width/2, height/2, w, h); } // save pdf - end if (savePDF) { savePDF = false; endRecord(); } } void keyPressed() { if (key=='s' || key=='S') saveFrame(timeStamp()+"_###.png"); if (key=='p' || key=='P') savePDF = true; } String timeStamp() { Calendar now = Calendar.getInstance(); return String.format("%1$ty%1$tm%1$td_%1$tH%1$tM%1$tS", now); }
リファレンス
- About - GENERATIVE DESIGN ―Processingで切り拓く、デザインの新たな地平
- Code - GENERATIVE DESIGN ―Processingで切り拓く、デザインの新たな地平
sizeの計算方法
A4縦:幅210mm, 高さ297mm ミリメートルをピクセル(px)に変換するには?
◎ミリメートルをインチに変換
1 mm = 0.03937 インチなので(参考:1mmをインチで - Google 検索) 210 × 0.03937
◎インチをピクセルに変換
PDF出力の解像度が72dpi(1インチ=72ピクセル)なので 210 × 0.03937 × 72