Processing
でのcsv作成はいろいろ方法がありますが、一番簡単なTable
でやってみます。
Table \ Language (API) \ Processing 3+
Table
どういう操作をしたいのかわかりませんが、
- csv新規作成
- csv読み込み
- csv保存
- 行の追加
- 行の編集
- 行の削除
を一通りやりました。
サンプルの動作ですが、マウスドラッグで線(点の集まり)が引けます。
線のデータをcsvに保存して、次回起動時に線を復元します。
その際古いデータはだんだん色が薄くなり、古すぎるデータは削除します。
Processing
1Table table;
2
3void setup() {
4 size(300, 300);
5 strokeWeight(5);
6 background(255);
7
8 // 【csv 読み込み】
9 table = loadTable("test.csv", "header");
10
11 if (table == null) { // ファイルがなかったらnull
12
13 // 【csv 新規作成】
14 table = new Table();
15 table.addColumn("x");
16 table.addColumn("y");
17 table.addColumn("color");
18 }
19
20 // 【csv 行の編集】 古いデータをグレーにする
21 for (TableRow row : table.rows()) {
22 // 読み込んだcolorに85を足して上書き(数字が大きいほど白くなる)
23 row.setInt("color", row.getInt("color") + 85);
24 }
25
26 // 【csv 行の削除】 colorが255になったものは削除
27 // colorが255の行のインデックスをすべて取得
28 int[] deleteRowIndices = table.findRowIndices("255", "color");
29 // 削除時の定跡 逆順にしてループ(後ろから削除しないとインデックスがずれていってしまう)
30 for (int index : reverse(deleteRowIndices)) {
31 // 指定インデックス行をTableから削除
32 table.removeRow(index);
33 }
34
35 // csvに保存した点を指定位置・色で描画
36 for (TableRow row : table.rows()) {
37 stroke(row.getInt("color"));
38 point(row.getInt("x"), row.getInt("y"));
39 }
40
41 stroke(0);
42}
43
44void draw() {
45}
46
47void mouseDragged(MouseEvent e) {
48 point(mouseX, mouseY); // 点の描画
49
50 // 【csv 行の追加】 描画した点をTableに追加
51 TableRow newRow = table.addRow();
52 newRow.setInt("x", mouseX);
53 newRow.setInt("y", mouseY);
54 newRow.setInt("color", 0); // 黒
55}
56
57void mouseReleased() {
58
59 // 【csv 保存】
60 saveTable(table, "test.csv");
61}
上図は、
- 丸を書いて一旦終了(削除された)
- 三角を書いて一旦終了
- 四角を書いて一旦終了
- バツを書いた
ところです。