yangfanconan 发表于 2013-5-10 17:05:22

Processing之旅-----【9课,Table数据实验课】

同学们,上课!今天进行Table数据类型的实践课!
/**
* 读取Table数据
* by Daniel Shiffman.
*
* 这个例子示范了如何使用 loadTable()
* 去取出数据从CSV文件中并生成一个对象从数据中
* CSV是(逗号分隔值)的英文缩写,通常都是纯文本文件。
*建议使用WORDPAD或是记事本(NOTE)来开启,
*再则先另存新档后用EXCEL开启,也是方法之一。
*开启后的CSV档包含了四或五个字段(部分),
*由左至右分别记载着:文件名称(XXXX.JPG)、档案大小(以BYTE为单位)、
*CRC32值(八个英文字母或数字组成)、档案路径和档案内容描述。
*而其中第四栏「档案路径」因为每个人储存整理图档的方式不同,
*所以本栏通常不存在,而一般有含有「档案路径」这栏的CSV档,又称为ECSV档案。
*
* 本例中 CSV 文件内容是这样的:
*
   x,y,diameter,name
   160,103,43.19838,Happy
   372,137,52.42526,Sad
   273,235,61.14072,Joyous
   121,179,44.758068,Melancholy
*/

// 定义了一个Bubble类型的数组
Bubble[] bubbles;
// 定义了一个表=Table对象的实例。
Table table;

void setup() {
size(640, 360);//设置窗口大小
loadData();//这个是调用的函数不是系统函数,是自定义函数。
}

void draw() {
background(255);
// 显示所有的气泡
for (Bubble b : bubbles) {//这个循环相当于for(int i=0;i《bubbles。lenght;i++)
    b.display();
    b.rollover(mouseX, mouseY);
}

textAlign(LEFT);//文字输出左对齐
fill(0);
text("Click to add bubbles.", 10, height-10);
}

void loadData() {
//读取CSV文件并将其中的数据导入Table对象中
// header"选项指示该文件的标题行
table = loadTable("data.csv","header");

// 这个bubbles数组的大小是根据CSV文件的行数决定的
    bubbles = new Bubble;

// 你可以循环访问表中的所有行通过游标
int rowCount = 0;
for (TableRow row : table.rows()) {
    // 你可以访问每一行通过列字段(或目录)
    float x = row.getFloat("x");
    float y = row.getFloat("y");
    float d = row.getFloat("diameter");
    String n = row.getString("name");
    // 让气泡对象接受数据
    bubbles = new Bubble(x, y, d, n);
    rowCount++;//行计数器自加1
}

}

void mousePressed() {
// 创建一个新的行
TableRow row = table.addRow();
// 保存值
row.setFloat("x", mouseX);
row.setFloat("y", mouseY);
row.setFloat("diameter", random(40, 80));
row.setString("name", "Blah");

// 写进csv文件中
saveTable(table,"data/data.csv");
// 然后再从新读一遍csv文件
loadData();
}
//一个气泡类
class Bubble {

float x,y;//位置
float diameter;//直径
String name;//名字

boolean over = false;

// 构造函数,创建气泡用的。
Bubble(float x_, float y_, float diameter_, String s) {
    x = x_;
    y = y_;
    diameter = diameter_;
    name = s;
}

// 当鼠标在气泡上
void rollover(float px, float py) {
    float d = dist(px,py,x,y);
    if (d < diameter/2) {
      over = true;
    } else {
      over = false;
    }
}

// 显示气泡
void display() {
    stroke(0);
    strokeWeight(2);
    noFill();
    ellipse(x,y,diameter,diameter);
    if (over) {
      fill(0);
      textAlign(CENTER);
      text(name,x,y+diameter/2+20);
    }
}
}

效果很明显,Table将永久的保存你画过的圆,那么这节课就上到这里。下课!{:soso__13766225770624999893_7:}

迷你强 发表于 2013-5-10 21:49:27

总感觉,很快能看到纸质书籍了。。。

yangfanconan 发表于 2013-5-10 21:58:21

迷你强 发表于 2013-5-10 21:49 static/image/common/back.gif
总感觉,很快能看到纸质书籍了。。。

什么纸质书籍?

迷你强 发表于 2013-5-11 09:33:53

{:soso_e113:}嘿嘿嘿

gytzzss 发表于 2014-12-1 16:23:21

继续顶~~~~~~~~

xingyun1024 发表于 2015-1-14 17:44:18

2015接触processing

xingyun1024 发表于 2015-1-14 17:44:48

完善processing,努力!!!!!!!!!!!!!!!!!
页: [1]
查看完整版本: Processing之旅-----【9课,Table数据实验课】