Seeking Help with Complex Processing Script for Visual Representation Generator

First benefit would be to combine the creation of the visualization with adding it to the arraykist like this

void setup() {
  size(800, 600);
  noLoop();
  // Add more instances as needed
  visualizations.add( new Visualization1());
  visualizations.add( new Visualization2());
  visualizations.add( new Visualization3());
  visualizations.add( new Visualization4());
  visualizations.add( new Visualization5());
  visualizations.add( new Visualization6());
  visualizations.add( new Visualization7());
  visualizations.add( new Visualization8());
  visualizations.add( new Visualization9());
  visualizations.add( new Visualization10());
  visualizations.add( new Visualization11());
  visualizations.add( new Visualization12());
  visualizations.add( new Visualization13());
  visualizations.add( new Visualization14());
  visualizations.add( new Visualization15());

  // Call setup for each visualization
  for (Visualization vis : visualizations) {
    vis.setup();
  }
  loop();  // needed to enable the 
}

On my computer creating the 15 visualizations took 11ms so is more than fast enough.

As to the Visualisation class I have several suggestions.

  • the class setup method is a problem. I suspect that you created separate sketches for each visualization then copied and pasted the code into its own class :wink: Most of the code is redundant because the method is only executed once from the main sketch setup method.
    For instance the size method will be ignored by Processing after its first execution and the call toframeRate is overwritten every time in this loop
  for (Visualization vis : visualizations) {
    vis.setup();
  }

Since each visualization has its own offset and timer values these should be attributes of the class rather than stored in separate arraylists e.g.

abstract class Visualization {
  float offsetTime;
  float timer;

  Visualization() {
    offsetTime = random(21, 46.7);
    timer = millis();
  }
  abstract void setup();
  abstract void draw();
}

This will make adding new visualizations much easier because you don’t have to update 3 array lists and maintain the order between them. The draw method then becomes

void draw() {
  background(0);

  if (visualizations.size() == 0) return;

  // Check the time for each visualization
  for (int i = 0; i < visualizations.size(); i++) {
    Visualization v = visualizations.get(i);
    float elapsedTime = (millis() - v.timer) / 1000.0;

    if (elapsedTime >= v.offsetTime) {
      currentVisualizationIndex = i;
      v.timer = millis();  // Reset timer
      break; // Break loop to render only the current visualization
    }
  }

  // Display the current visualization
  if (currentVisualizationIndex != -1) {
    visualizations.get(currentVisualizationIndex).draw();
  }
}

and you can delete the arraylists for offsets and timers.

AMENDED CODE
You can download the archived sketch here

1 Like