Can I align linked object instances to a 3d curve, while still remaining upright?

I’m trying to make a fully parametric curved fence along a 3d spline, with the number of fence posts controllable by drivers. The fence is not restricted to a flat plane. Also, the posts need to remain vertically aligned, and I want them to remain linked instances.

I’ve tried:
Array- Geometry isn’t instanced, so the shape gets slightly warped by the curve. Also, objects follow the pitch of the curve, so they can’t stay upright.

Dupliverts- This works pretty well (at least for cylindrical posts), because the number of instances can be controlled by a driver. However, posts are all in the same orientation about the vertical axis, and don’t align themselves to the curve. When I check the “Rotation” option for the dupliverts, objects don’t remain vertically aligned.

Hair Particles- Objects remain upright, but I don’t think the number of instances can be controlled by a driver. Also, I didn’t see any way to rotate particles about a single axis to follow a curve.

Use Dupliframes for duplication, and Limit Rotation constraint to keep them pointing straight up.


dupliframes_poles.blend (99.9 KB)

Wow, that’s awesome, thank you! That will come in handy in the future.
I hadn’t even tried dupliframes before. I guess I just assumed it wouldn’t make all the copies at frame#0.

I actually came up with a really roundabout solution as well. I used duplifaces so there would only be one instance per face, and it would be oriented the right direction, but only if the curve was flat. So I created a linked copy of my curve, used shrinkwrap to project the linked copy down onto a plane, then used two shrinkwrap modifiers to move the top and bottom vertex groups of my arrayed faces back up to a set of offset surfaces following the original curve. It’s a much more confusing setup, but it gives me fine control over the exact number of posts.

I’ll post my result once I get this model completed.

Ok, I get it now. You have to set the path’s animation steps through the curve settings.