Hi Jesse, I've been able to make some progress on a gem arraying function for the next v2 beta. Since I want the next beta release to be the last one for v2 this probably won't get refined any more until sometime into v3 but it seems like it should help out for the time being and is hopefully a good starting point.
You will have to set up a shortcut key to launch it, the command name will be: ArrayGem (to be similar to the other array commands like ArrayGrid, ArrayDir, etc..).
The way it works is pretty simple, you first select the objects that you want to duplicate and also select a previously drawn "base circle" along with them.
Then you run the command, and select the path curves (there can be multiple curves) and the surface for orientation.
Then the final stage is to enter a spacing value, either by clicking 2 points or by entering in a number value.
It looks like this:
Here's another view of that result:
The center point of the base circle defines the "water level point" - the circle center point will be the place that goes directly on the surface. So you can position the circle and objects in relation to one another to define how far you want stuff to stick up above or below the surface. Here's a closeup of the object and base circle from above:
You can choose to either move the object up, or the circle down to adjust that part.
Then the way the spacing works is the spacing you pick becomes the length of an invisible line segment that is constructed between each circle.
It's a little slow to compute everything, like the above one takes 16 seconds of calculation time to finish (but on a 6-year old slow computer though too). Anyway, if you have a big one it will probably take a few minutes but certainly a whole lot faster than placing them by hand! :)
Also it will probably not be able to work right if the curve wiggles around a whole bunch in between each instance. So you can't have something like a curve that bends back and forth a lot and then have a large spacing specified where it would have to cross a bunch of those bends in one step.
It seems to be working pretty well though, but there will probably need to be some tune-ups in v3.
Here's another example - here I drew one 2D curve, then offset it several times and then projected it on to the surface, then used ArrayGem:
There are also some other object orientation tools coming in addition to this, like PastePart (paste + set orientation as shown in a previous thread), and also a new Transform > Orient command as well.
So all together there should be a big boost in this area of getting stuff oriented to a surface normal in this next beta release, which was pretty painful to do before.
- Michael