日常の進捗

主に自分のための,行為とその習慣化の記録

Mod: Generative Design / P_1_0_01

f:id:takawo:20171227224348g:plain

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);
}

リファレンス

sizeの計算方法

A4縦:幅210mm, 高さ297mm ミリメートルをピクセル(px)に変換するには?

◎ミリメートルをインチに変換

1 mm = 0.03937 インチなので(参考:1mmをインチで - Google 検索) 210 × 0.03937

◎インチをピクセルに変換

PDF出力の解像度が72dpi(1インチ=72ピクセル)なので 210 × 0.03937 × 72