Rhino WIP Feature: ArrayCurve

Rhino WIP has an all new ArrayCurve command.

What is ArrayCurve?

ArrayCurve, much like the existing ArrayCrv command, lets you quickly and easily repeat objects along any curve, making it simple to create patterns, details, and design features that follow a path. Whether you’re adding decorative elements, or laying out repeating components, ArrayCurve gives you full control with minimal setup—saving time while keeping your designs flexible and precise.

Why is there a new ArrayCurve?

Designing with repeating elements along a curve is a common task, but the original workflow required multiple steps, limited feedback, and frequent trial-and-error. ArrayCurve was redesigned to remove that friction.

With interactive in-viewport controls, an expanded and more intuitive UI, and deeper control over spacing, scale, and layout, ArrayCurve turns what used to be a technical setup into a visual, design-driven experience. You can now see changes instantly, fine-tune results directly in the viewport, and explore more variations without interrupting your creative flow.

The result is a tool that’s faster to learn, easier to use, and more flexible—allowing you to focus on design decisions instead of command settings.

Command Flow

To start the command, simply preselect a curve and run the ArrayCurve command. Then select the object(s) to array using the Object Selection controls. Alternatively, if you do not have a curve preselected, you can use the Select Curve option after running the command.

The new ArrayCurve command combines in-viewport interactive controls and a command dialog with options to control spacing, scale, position, and a variety of layout settings. Using the Source options in the Object Selection controls, you can toggle between Document Object and Block Definition (if blocks are present in the current file).

Finish the command by clicking OK in the dialog to add the result to the document. ArrayCurve also supports History - You can select the objects that were previously arrayed, and run the command again to pick up right where you left off, allowing for easy edits.

Command Dialog and Options

Curve Selection

The Curve Selection section has options to select the curve to use for the array, as well as controls for the span (start and stop of the array) and positioning options for prioritizing placement of object centers at the ends of the span, or centered at kinks for handling sharp corners.

Object Selection

This section allows you to pick a document object or a block definition to use as the object to array. When using blocks, the Select Objects button changes to a drop down list, allowing you to select from blocks that are in the current document.

Sizes

Here you will find controls for the object scale controls. You can toggle from 3D to 1D scale options by clicking the scale icon to the left of the UI. Using the locks, you can either maintain a uniform size/scale, or unlock to allow for tapering.

Object Spacing

The spacing between objects can be controlled based on an actual distance, or as a percent.

Orientation

The options in this section allow you to set the orientation of the objects being arrayed (based on curvature, the World Z direction, the origin, or a selected object. You will also find vertical and horizontal alignment settings.

Transform Adjustments

Using the controls in the Transform Adjustments section, you can control the rotation, pitch, and roll of the object being arrayed. You can use the offsets values to adjust the position in relationship to the curve in the U,V, and N directions.

Try the New ArrayCurve

Our hope is that this creates a more streamlined experience for the layout of repeating design elements. Please try it out and let us know what you think.

We look forward to your feedback!

Download the Rhino WIP…

41 Likes

I found one huge disadvantage of this new toll. It’s too addicting! :clinking_glasses::smiley:

Imagine if the same love is given to “Blend surface” and “Match surface”…

8 Likes

From what I’ve seen in internal “show and tell” sessions it is very very addicting

4 Likes

and others then rhino will be absolute mature beast. now its a teenager beast :d

1 Like

By the way, very nice job by the UI designers! Seeing some quality improvements in that regard gives me hopes that other tools will be also updated in a similar fashion in the near future.

7 Likes

Very impressive!

I know this will make me sound like a chronic complainer who is never satisfied, but since you have provided for roll, pitch and yaw adjustments wouldn’t it be useful to allow 1d, 2d, 3d scaling object size as well?

Even more interesting would be to allow, in addition to the basic position curve, a coordinated supplementary curve for each of roll, pitch, yaw, scale so the basic object can be varied in more than a linear way as it proceeds along the position curve. But perhaps this is best left for Grasshopper.

2 Likes

Even more interesting would be to allow, in addition to the basic position curve, a coordinated supplementary curve for each of roll, pitch, yaw, scale so the basic object can be varied in more than a linear way as it proceeds along the position curve. But perhaps this is best left for Grasshopper.

Yes that sounds like very workflow specific grasshopper territory. There was a point where the feature creep for this version was just too much. But.. along the orientation lines you can also specify a secondary curve as an orientation curve. Maybe not the same as what you’re talking about but another additional attractor to influence orientation along the curve.

wouldn’t it be useful to allow 1d, 2d, 3d scaling object size as well?

Maybe you missed the uniform and non-uniform scale settings?

1 Like

Is there a way to add zig-zag positioning of the object that will follow the curve? I mean, in that example with the ball, one copy of the object goes up by a set distance, the next copy goes down, etc.

No, but have you considered just setting up the object you want to array with the zig/zag you want and then using the two of them?

So much better than 3ds Max array tool, 3ds max’s tool is not very user friendly but Rhino’s one is a nice one. Just saying :slight_smile: Thank you to all who have contributed that command.

One question, is the below page will be replaced by New ArrayCurve? Arraycrv is going to be obsolete?

Our plan is to replace ArrayCrv with ArrayCurve. There’s still a couple of tricks to implement from ArrayCrv before this can happen so for now the new version is sitting in a different command name. We’ll probably move the old command off to a test command for those that might still depend on it for scripts or certain long used workflows.

1 Like

I am so glad to hear that. 3ds Max won’t remove very very old tools that makes people confused. Nice to hear that Rhino crushes the old ones :sweat_smile:

Thank you for your vision Mcneel team :rhinoceros:

2 Likes

I guess so. I was basing my comment just on the Command Dialog and Options box you posted. I can see I need to make time to sit down with the WIP and fool around with it.

Are you referring to the 9 “sizes” boxes or am I still missing what you mean?

Genuine question: sarcasm or sincerity?

Useful addition!

For consistency, it would be good if the Span Range could also be defined in standard units, e.g., starting 100 cm from one end and 150 cm from the other. Since Spacing Distance can be defined in both percentages and units, the same should be possible for Span Range. Otherwise, the GUI and options are very nice.

I think your question regarding to “the crush”. It was a sincere sentence, I love Rhino that brings new tools and remove older ones, for instance in v9.

My question is: where can I enter the number of objects I want to duplicate along a curve? At the moment it seems that the only way is to change the spacing between objects along the curve to indirectly reduce or increase their count — or am I mistaken?
visore_dec01.3dm (1.8 MB)

Another question: when I expect the repeated object to follow the curve and use the surface orientation as the normal direction, what I actually expect is that the object sits at a distance of 0 from the surface.


It would be useful, if possible, to be able to tell an object duplicated along a curve to adapt to a surface in two different ways: a non-rigid (deformable) mode and a rigid mode, similar to what is available in this Blender add-on example.
https://superhivemarket.com/products/conform-object


This is what I would expect from an array. Right now, I achieved this by extracting 3 points along the curve, then using Orient by 3 Points to position the object on the surface, and finally subtracting the object from the surface.

1 Like

If your object is completely inset along the orientation surface then the normals of that object are likely flipped. You can hit the flip button which will inverse the solution or use the Vertical Align and set it to Top,Bottom, Center etc. If you want the objects sitting on top of the surface, under the surface or center of the surface. We can certainly add more features moving forward like deforming, object counts, between curves etc.

Orientation Alignment Options


Flip

6 Likes

Agreed, it’s definitely needed. We’ll add a toggle to the slider to use units for the span insets. RH-92237

Yes, deformable is a fun option for sure, though it was very beyond the scope of replacing the original command and feature creep, but it’s easy to add. RH-92236

Spacing is indeed the current way. We can add an input for it. RH-92238

3 Likes

Thank you for the video explanation and for the future additions to the already existing features.

1 Like