What does "basic support for iteration" mean?

…And does this mean there will be more advanced iteration features coming down the road? How will this compare to the QC Iterator patch? (Really looking forward to iteration support! It’s going to change my life.)

Good question. Team Vuo has recently been fleshing out the basic support for iteration, and we’d appreciate feedback from the community.

For “basic support”, we want to focus on supporting some common scenarios, such as drawing several copies of things. To illustrate the kinds of scenarios we have in mind (not necessarily the exact nodes to be added in Vuo 0.7), here are some ideas:

  • Node that inputs a 3D object and outputs multiple copies of that 3D object with different transformations.
  • Node that inputs a list of 2D layers and arranges them in a grid.
  • Node that inputs a math expression and outputs a list of points.

Are there other scenarios you’d like Vuo to support?

For “advanced support” — yep, that’s coming down the road. It would be a more general solution to iteration. One idea we have in mind is a node that would input a list of items plus a special cable from another node/subcomposition, feed each item through the other node/subcomposition, and output the list of results. For example, if you input a list of points and a node that creates a 3D object at a point, then it would output a list of 3D objects. Compared to Quartz Composer’s Iterator patch, Vuo’s iteration should be more flexible, easier to troubleshoot, and hopefully easier to figure out. It will take a lot of time to implement, though, so it’s currently scheduled for after Vuo 1.0. Hence the “basic support” for now.

(Edit: Removed incorrect info about QC Iterator’s ability to output.)  

In QC I most often use iterators to render objects whose coordinates and other properties come from structures generated in a Javascript patch. So for me, it looks like the advanced iteration support is going to be what really opens up Vuo’s potential. (

For the basic support phase, maybe consider these:

  • Node that inputs a list of math expressions and a number (or several numbers, or points, or whatever) and outputs a list of results (numbers, points, whatever).
  • Nodes that come prebuilt with certain common math expressions, say for example, a node that inputs a starting value, common difference, and sequence/series flag, and outputs a specified number of terms in an arithmetic sequence. It might open up the math expression idea to a wider audience, and it would safe typing in frequently used expressions for the rest of us.
  • Node that takes a list of lists (is this even possible right now in Vuo?) and outputs the specified list in those lists. (Alternatively, nodes that take things like 3D points, and output just the X, Y, or Z coordinate from each. Same idea with transformations, outputting rotation, translation or scale. Etc.)
  • Node that emulates QC’s queue patch, taking a generic input, and outputting a list of those inputs, recorded as events are received. The list could then go on to be processed by another basic iteration node.

@Pianomatic, thanks. It’s helpful to know what kind of iteration support you’re looking for.

You can expect to find some of this in the upcoming 0.7 release, with more added by the 1.0 release. A couple of your suggestions I wasn’t sure what you meant. Would you mind answering some questions (below)?

In QC I most often use iterators to render objects whose coordinates and other properties come from structures generated in a Javascript patch.

What if you had a node that could take a list of translations, scales, and/or rotations and output a list of 3D objects? Here’s a mockup to illustrate. It shows an example of rendering several cubes.

Is this at all what you had in mind? It’s what we were thinking for “node that inputs a 3D object and outputs multiple copies of that 3D object with different transformations”. Besides position, scale, and rotation, are there other properties from structures that you often use in QC?

Node that inputs a list of math expressions and a number (or several numbers, or points, or whatever) and outputs a list of results (numbers, points, whatever).

I’m not sure I understand. What if there were a Calculate node that inputs a single math expression and a number/point, and outputs a single result? Would your proposed node be equivalent to using several Calculate nodes?