Processing: 動画上に連続した線分を描く

Processing(2.2.1)で、カメラから取り込んだ動画上に連続して線分を描く。右クリックでクリア。

import processing.video.*;

Capture camera;
Point[] points = {}; //線分の端点を保持する配列

void setup() {
  size(640, 480);
  smooth();

  String[] cameras = Capture.list(); //利用可能な動画入力の配列を取得
  
  if (cameras.length == 0) {
    println("There are no cameras available for capture.");
    exit();
  } else {
    println("Available cameras:");
    for (int i = 0; i < cameras.length; i++) {
      println(cameras[i]);
    }
    
    camera = new Capture(this, cameras[0]); //MacのFaceTimeカメラの場合0番目
    camera.start();
  }
}

void draw() {
  if (camera.available() == true) {
    camera.read();
  }
  image(camera, 0, 0); //カメラ入力を表示

  stroke(255, 0, 0); //赤線
  strokeWeight(5); //太さ5
  for (int i = 1; i < points.length; i++) {
    line(points[i-1].x, points[i-1].y, points[i].x, points[i].y); //線分の描画
  }
}

void mouseClicked() {
  if(mouseButton == LEFT) { //左クリックで線分(端点)の追加
    Point point = new Point(mouseX, mouseY);
    points = (Point[])append(points, point);
  } else if(mouseButton == RIGHT) { //右クリックで線のクリア
    points = new Point[0];
  }
}

/**
 * 線の端点のクラス
 */
class Point {
  int x, y;
  
  Point(int ex, int ey) {
    x = ex;
    y = ey;
  }
}