日常の進捗

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

Mod: Generative Design / P_1_1_1_01

f:id:takawo:20171228010113g:plain

マウスカーソルの位置に合わせてグリッドの細かさが変わりながらHSBの色相を表示するもの.

今回のようにマウスの座標をステップ数使う場合,原点(0,0)の位置にあるときfor文が無限ループしてしまう問題がある.サンプルではstepX = mouseX + 2;のような感じで解決していたが,色の表示やマウス位置に関してconstrain()map()を使ったりして上手いこと処理した.

あまり関係ないけど,このサンプルのようなやり方でキーボードのインタラクションからタイムスタンプを呼び出して画像/PDFで書き出せる機能は普通に便利なのでテンプレートを作った.TextExpanderという,俗にスニペットツールと呼ばれるアプリケーションを使っている.他のものでもだいたい一緒だと思う.雛形のコードを登録しておけば,例えばxp5a4のようなタイプをしてコードを呼び出せる.

こういった効率化の工夫は大事.gistにあげています.

コード

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);
  }
  background(0,0,100);
  noCursor();
  noStroke();

  float stepX = constrain(mouseX,1,width);
  float stepY = constrain(mouseY,1,height);
  
  for (float y = 0; y < height; y += stepY) {
    for (float x = 0; x < width; x += stepX) {
      float hue = map(x, 0, width, 0, 360);
      float sat = map(y, 0, height, 100, 0);
      fill(hue, sat, 100);
      rect(x, y, stepX, stepY);
    }
  }

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

リファレンス