Processing 如何加载.csv文件并在处理过程中绘制二维形状

Processing 如何加载.csv文件并在处理过程中绘制二维形状,processing,Processing,我想使用LoadString将数据加载到csv文件中,然后绘制相应的2D形状。第1组为椭圆,第2组为三角形,第3组为矩形,第4组为平行四边形,第0组为其他矩形。 但是,我的代码无法显示相应的形状。它们不显示任何形状,并且我的代码中没有错误。还有一个问题,有没有办法在每个对应的图表下显示他们的名字 Table table; void setup(){ size(1000,1000); } void draw(){ table = loadTable("text.csv&qu

我想使用LoadString将数据加载到csv文件中,然后绘制相应的2D形状。第1组为椭圆,第2组为三角形,第3组为矩形,第4组为平行四边形,第0组为其他矩形。 但是,我的代码无法显示相应的形状。它们不显示任何形状,并且我的代码中没有错误。还有一个问题,有没有办法在每个对应的图表下显示他们的名字

Table table;

void setup(){
  size(1000,1000);
}

void draw(){

  table = loadTable("text.csv", "header");
  for (TableRow row : table.rows()) {
    int x = row.getInt("X");
    int y = row.getInt("Y");
    int group = row.getInt("Group");
    String name= row.getString("Name");
   

  fill(#000000); 
    if("1".equals(group)){
      ellipse(x,y,80,80);
    } else if ("2".equals(group)){
      triangle(x,y,x+20,y-20,x+20,y);
    } else if ("3".equals(group)){
      rect(x,y,50,50);
    }  else if ("4".equals(group)){
      quad(x, y ,x+100, y, x+150, y+95, x+40, y+95);
    } else if ("0".equals(group)){
      rect(x,y,50,60);
    }
  }
}

这是名为“text.csv”的csv文件,内容如下:

Name,X,Y,Group
Victor Anderson,627,705,2
Jack Scott,808,643,3
Sean Robinson,624,627,4
William Rodriguez,423,396,1
Aaron Kelly,775,181,0
你太近了

组是一个int(
int Group=row.getInt(“组”);
),而不是一个
字符串,因此条件如下所示:

 if(group == 1){
      ellipse(x,y,80,80);
    ...
在这方面:

Table table;

void setup() {
  size(1000, 1000);
}

void draw() {

  table = loadTable("text.csv", "header");
  for (TableRow row : table.rows()) {
    int x = row.getInt("X");
    int y = row.getInt("Y");
    int group = row.getInt("Group");
    String name= row.getString("Name");


    fill(#000000); 
    if (group == 1) {
      ellipse(x, y, 80, 80);
    } else if (group == 2) {
      triangle(x, y, x+20, y-20, x+20, y);
    } else if (group == 3) {
      rect(x, y, 50, 50);
    } else if (group == 4) {
      quad(x, y, x+100, y, x+150, y+95, x+40, y+95);
    } else if (group == 0) {
      rect(x, y, 50, 60);
    }
  }
}
您可以改进以下几点:

  • 格式化代码:这将使阅读更容易。早起是一个好习惯:因为你要写的代码会越来越长,保持它的条理性会使它更容易阅读。与键入指令相比,程序越复杂,您将花费更多的时间阅读/调试代码
  • setup()
    中仅加载一次数据。无需在
    draw()
    中每秒多次重新加载相同的数据。(如果需要draw(),可以选择清除背景,但是在当前示例中,一切都可以在设置中工作)
  • 或者,您可以使用,而不是
    if/else
    ,可能与形状的常量一起使用。尽管它看起来更像代码(而不仅仅是使用整数值),但它更易于阅读(您不需要考虑哪个数字是哪个数字),并且更易于更新
  • 以下是使用上述注释的示例:

    Table table;
    
    final int SHAPE_OTHER_RECT    = 0;
    final int SHAPE_ELLIPSE       = 1;
    final int SHAPE_TRIANGLE      = 2;
    final int SHAPE_RECT          = 3;
    final int SHAPE_PARALLELOGRAM = 4;
    
    void setup() {
      size(1000, 1000);
      // load the table once
      table = loadTable("text.csv", "header");
      // reset background to white
      background(255);
      
      for (TableRow row : table.rows()) {
        int x = row.getInt("X");
        int y = row.getInt("Y");
        int group = row.getInt("Group");
        String name= row.getString("Name");
    
    
        fill(#000000); 
        
        switch(group){
          case(SHAPE_OTHER_RECT):
            rect(x, y, 50, 60);
            break;
          case(SHAPE_ELLIPSE):
            ellipse(x, y, 80, 80);
            break;
          case(SHAPE_TRIANGLE):
            triangle(x, y, x+20, y-20, x+20, y);
            break;
          case(SHAPE_RECT):
            rect(x, y, 50, 50);
            break;
          case(SHAPE_PARALLELOGRAM):
            quad(x, y, x+100, y, x+150, y+95, x+40, y+95);
            break;
        }
        
        // render text
        text(name, x, y);
      }
    }
    

    最后,请注意,它的用法使得在给定位置(x,y)显示名称(字符串)变得很简单。请记住y是基线(文本的底部),因此您可能需要更改x,y以更好地定位文本。由于数据没有变化,您只需在
    setup()
    中渲染一次即可节省CPU周期,而不是在
    draw()

    中连续重新渲染相同的数据。“但是,我的代码无法显示相应的形状。”那么它会做什么呢?你有错误吗?它是否显示了其他错误的形状,如果是,是哪个?还是什么都不显示?什么都不显示。