处理-如何加载.txt文件并绘制2D形状?

时间:2019-04-28 04:01:18

标签: processing

我不确定如何绘制文本文件中包含的形状。 我想使用loadStrings将数据加载到文本文件中并绘制相应的2d形状。

请帮助

txt文件是“ data.txt” 内容是:

ellipse 100,100,80,50
line 20,30,120,150
rect 0,100,50,70

1 个答案:

答案 0 :(得分:0)

要绘制数据文件中指定的形状,我们可以

  • 选择一种文件格式,csv可以很好地工作,但我们也可以使用文本文件
  • 确定要使用的形状属性。在此示例中,我们将仅使用形状,x,y,宽度和高度。我们还可以指定颜色和透明度之类的东西。
  • 编写读取文件的代码。如果我们使用的是csv格式,则处理过程可以使用loadStrings读取文本文件。处理过程将使事情变得更加轻松。
  • 编写绘制形状的代码

在第一个示例中,我们将像这样格式化数据文件:

ellipse,110,100,80,50
line,170,30,150,150
rect,10,100,50,70
ellipse,110,200,50,50

我们可以选择任何需要的内容,包括空格来分隔元素。在这里,我们感到昏迷。该文件另存为shape_data.txt在我们草图的文件夹中。

代码:

// since we use position in our data to keep track of what each element is
// we name an index into each element
int shapeIndex = 0;
int xIndex = 1;
int yIndex = 2;
int widthIndex = 3;
int heightIndex = 4;

void setup() {
  size(900, 900);
  background(0);
  fill(255);
  stroke(255);
  String [] shapeRows = loadStrings("shape_data.txt");
  for (String s : shapeRows){
    String [] elements = s.split(",");
    int x = Integer.parseInt(elements[xIndex]);
    int y = Integer.parseInt(elements[yIndex]);
    int shapeWidth = Integer.parseInt(elements[widthIndex]);
    int shapeHeight = Integer.parseInt(elements[heightIndex]);
    String shape = elements[shapeIndex];
    if ("ellipse".equals(shape)){
      ellipse(x,y,shapeWidth,shapeHeight);
    } else if ("line".equals(shape)){
      line(x,y,shapeWidth,shapeHeight);
    } else if ("rect".equals(shape)){
      rect(x,y,shapeWidth,shapeHeight);
    }
  }

下一个示例使用的是csv文件而不是纯文本文件。数据仍然是纯文本,我们仍然依赖于元素的位置,但是我们得到的好处是,元素被命名并且名称存储在文件头中。

csv文件如下所示,我们将其另存为shape_data.csv与草图相同的文件夹中。

shape,x,y,width,height
ellipse,110,100,80,50
line,170,30,150,150
rect,10,100,50,70
ellipse,110,200,50,50

和代码:

Table table;

void setup() {
  size(900, 900);
  table = loadTable("shape_data.csv", "header");
  background(0);
  fill(255);
  stroke(255);
  for (TableRow row : table.rows()) {
    int x = row.getInt("x");
    int y = row.getInt("y");
    int shapeWidth = row.getInt("width");
    int shapeHeight = row.getInt("height");
    String shape = row.getString("shape");
    if ("ellipse".equals(shape)){
      ellipse(x,y,shapeWidth,shapeHeight);
    } else if ("line".equals(shape)){
      line(x,y,shapeWidth,shapeHeight);
    } else if ("rect".equals(shape)){
      rect(x,y,shapeWidth,shapeHeight);
    }
  }
}

当我们运行任一草图时,我们将看到: Shapes drawn from a csv file