Copy and transform a torus but keep the same thickness?

Or to put it another way, what’s a good method for making concentric circles using the torus? I’m using the torus object because (like in QC) I enjoy how it generates polygon sides with low count columns. Copying a torus using Copy 3D Object with Transforms also scales thickness. Is there a way to send a list of scales to a torus?

As you noticed, the Thickness port is relative to the scale of the torus (e.g. 0.1 times the radius of the torus). You want to create tori of different scales but all having the same absolute thickness (e.g. 0.1 in Vuo coordinates). To do that, you’ll have to pass a different value to the Thickness port for each torus to compensate for their different scales.

Here’s a composition that does that. The Make Points Along Curve node makes a list of scale factors for the tori. For each scale factor, the Make Torus node creates a torus with that scale and a Thickness value to compensate.

I came up with the formula in the Calculate node by first thinking about some specific examples. If the scale is 1.4 (the biggest torus), I want the Thickness port to be 0.05. If the scale is 0.7 (half of original), the Thickness port should be 0.1 (twice the original). If the scale is 0.14 (a tenth of the original), the Thickness port should be 0.5 (ten times the original). So, to put this in a formula, I want to take the original scale of 1.4 and divide it by the the current scale, then multiply that by the original thickness of 0.05. In math: 1.4 / currScale * 0.05. More generally: maxScale / currScale * thickness.

ConcentricTori.vuo (4.34 KB)

Thanks so much, Jaymie! Super helpful comp.

Ok, Jaymie, thanks again for your posted comp. I’ve been making progress, having fun! I have a few questions.

First, in my attached version, I wish to animate torus thickness. How can I animate the phase of the Wave without the annoying “gap” (which strangely does not show up in a screenshot)? How do I feed the Time on the Curve and/or Wave? Requested Frame or Process Item is not currently working for me.

Second, your math explanation made perfect sense to me at the time, then I started tinkering and the 1.4 max seemed to not make a difference. I set out to use a normalized Make Points Along Curve, so I could use the Process List item output as a general set of numbers to apply to more than one parameter. Mine is working with simpler formula – and without the Hold – but I’m not totally sure why it does compared to your math. (I did have to fix the Z-space which was messing up the spacing, the concentricity as it were).

Which brings me to my third question, can you clarify why the Hold node is in your comp? Something about the event wall perhaps? In my tinkering it seemed unnecessary, then it seemed not to be working at all with my new setup (and at one point also seemed to bump up fans and cpu in istat menus. Maybe).

Screen Shot 2016-01-17 at 9.13.35 AM.png

Pt 2, little stuff that came up while working on this comp.
(I noticed that you moved another question to discussions…)

FR: UI for published ports to make sliders (and set min/max), buttons, pulldowns, text boxes, etc.? (I voted for the FR for UI nodes, does this overlap?) (I’m using VDMX as well).

FR: I wish there was a way to see all published port settings at once – I guess this means having a separate GUI for published ports?

FR: Comment node?

ConcentricTori_2.vuo (9.89 KB)

Screen Shot 2016-01-17 at 9.13.35 AM.png

@jersmi, I moved your first question here, since it’s more of a separate question.

Your math looks OK to me. The 1.4 in my composition controlled the outermost torus diameter. In your composition, it looks like you’ve just substituted 1 for 1.4 (= maxScale).

The Hold Value node is needed to prevent an extra event from going into the Process List feedback loop from the Fire on Start node. With Process List, you should make sure that each event into the Processed Item input port matches up with an event fired from the Process Item output port. Without the Hold Value node, your composition could occasionally glitch, probably by outputting 1 fewer than the expected number of rings. See the node documentation for Process List for more info.

Feature requests: See A UI for storing and editing published input port values in exported apps and Add support for notes on compositions — group nodes visually and write some info about that group, or if those aren’t what you had in mind, consider posting a new feature request.

Thanks, Jaymie! I still need to wrap my head around the Hold node in this comp, and your description makes it a suspect in the second question. The FR’s are on the mark for me. I appreciate your support! I will continue this convo in the other thread.