Thanks, Atom, it’s working perfectly. If you think the screen recording might help me to learn the ropes for developing blendgraph nodes, then please put it up, I’ll definitely check it out.
I hope to be able to put some time into extending this node soon. In the other thread mentioned above, I already talked about switching which variables control which, eg, now we have z = f(r, a) (base shape: disc), but we could also have r = f(a, z) (base shape: cylinder) or a = f(r, z) (base shape: plane).
I’d also like to provide the 3 most common coordinate systems: cartesian (3 linear components), cylindrical (1 angular + 2 linear) and spherical (2 angular + 1 linear). I might use a dropdown list in the actual generator for this, or make a number of additional coordinate-systems-transform nodes, eg, CylindricalToCartesian. I think these would probably make sense as a general mathematical node (transform 1 vector), but I’m not sure it makes sense in the generator scenario (applied to a whole mesh).
Other possibilities would be to also provide a 1-D/curve version of this, so you would have 1 coordinate driving the other 2, instead of 2 driving the 3rd. Actually, come to think of it, it may be best to define some independent parameter (say s), and supply 3 separate function for each coordinate: x = X(s), y = Y(s) and z = Z(s). And I should obviously consider the same thing for the 2D-case, so x = X(s, t), y = Y(s, t) and z = Z(s, t). A 3D version might also be conceivable, where you define volumes. The function might generate points (particles) in a volume, or define some kind of weight at each location in space, or determine wheter or not this location lies inside the set we’re generating.
Finally, I was thinking that having your function defined inside a small one line text field probably limits the expressiveness (if that’s a word) of this node. Wouldn’t it be cool if you could reference a python file with predefined functions, and be able to select/use the functions it finds in there? These function would need to have a given signature, eg, def Calc(s, t) in the 2D case.
Phew, that’s quite the todo-list, I guess…