2016-11-21 1 views
1

Я пытаюсь сделать PShape SVG multipy. Я хочу, чтобы новая фигура создавалась каждый раз, когда изменяется переменная (которую я импортирую из файла CSV). Я попытался использовать for, но он не уважает диапазон переменных, который я ему даю, он просто создает столько SVG, сколько захочет. В основном, что я пытаюсь сделать, так это то, что если переменная указывает, что есть 21 данные между X яростью, нарисуйте 21 копию SVG на фиксированном расстоянии между одним и другим.pshape processing multiple

Table table; 

PShape tipi2; 
PShape tipi3; 


void setup() { 

    size (1875, 871); 
    table = loadTable("WHO.csv", "header"); 
    tipi2 = loadShape("tipi-02.svg"); 


} 


void draw() { 

    background(0); 


    for (TableRow row : table.rows()) { 

    int hale = row.getInt("Healthy life expectancy (HALE) at birth (years) both sexes"); 


    } 
    tipi2.disableStyle(); 


noStroke(); 

for(int i = 0 ;i<=1800;i=i+33){ 


pushMatrix(); 

    translate(0,89.5); 

     if(hale > 40 && hale < 60){ 

shape(tipi2,i,0); 

popMatrix(); 
} 

} 
+0

Вы можете очистить ваш отступы для удобства чтения? –

+0

@LauraFlorez Можете ли вы опубликовать файл .svg (как фрагмент кода) и .csv (как ссылку), чтобы облегчить нам тестирование? –

ответ

1

Есть несколько вещей, которые пара вещей, которые можно было бы улучшить в текущем коде:

  • видимость в hale переменной (или объема) только в пределах этого цикла: for (TableRow row : table.rows()) {
  • в стили рисования (noStroke()/disableStyle() и т. д.) не сильно меняются, поэтому можно установить один раз в setup(), а не несколько раз в секунду в draw()
  • вы можете переместить цикл for fr ом 0 до 1800 внутри цикла for (TableRow row : table.rows()) {, но это не может быть очень эффективным:

Вот что я имею в виду:

Table table; 

PShape tipi2; 
PShape tipi3; 


void setup() { 

    size (1875, 871); 
    table = loadTable("WHO.csv", "header"); 
    tipi2 = loadShape("tipi-02.svg"); 

    //this styles could be set once in setup, rather than multiple times in draw(); 
    tipi2.disableStyle(); 
    noStroke(); 

    background(0); 


    for (TableRow row : table.rows()) { 

    int hale = row.getInt("Healthy life expectancy (HALE) at birth (years) both sexes"); 

    for (int i = 0; i<=1800; i=i+33) { 

     pushMatrix(); 

     translate(0, 89.5); 
     //hale is visible within this scope, but not outside the for loop 
     if (hale > 40 && hale < 60) { 

     shape(tipi2, i, 0); 

     } 
     //popMatrix(); should be called the same amount of times as pushMatrix 
     popMatrix(); 
    } 

    } 
} 


void draw() { 


}