Best way to arrange an equally spaced set of circles along a curve?

I need to place circles (acting as visual rivets when seen orthographic plan 2D) of equal spacing, lets say 20mm, along a curve on a curving surface (aircraft skin),( curve being line projected to surface), but I dont know how many will fit that line.
What is best method to select the circle, indicate spacing between centres, and have it fill curve with circles, these circles being on the surface ?

Where should that first circle exist, on curve or somewhere nearby.
I also presume it should be a block instance, I will need to alter its colour later, normally something I fail to achieve if something is block instance, moving it to another layer sees no colour change I recall.


Grasshopper or python would be perfect for this

Hi Steve, try ArrayCrvOnSrf Start with the circle on the origin.


or place your circle at the start point of your surface curve and simply use ArrayCrv.

choose your distance, select freeform and done.

You’d probably do well to have a play around with ArrayCrvPlus:

It’s really helpful for this sort of stuff. It does what Rhino already does but it’s helpful insofar as you can make amendments on the fly and test out settings without committing, undoing and then reapplying.


2Dcube, a new site of goodies :slight_smile: step 4 says define number of circles, trouble is i dont know how many.

Pascal…origin ? 0,0 or start of line ? if 0,0 why do circles have to be placed there away from the line ?

RichardZ…seeing is everything, cheers, looks promising.

Will try that first.
then pray make2D will 2D it all.


Hi, using RichardZ method, I drew circle, oriented it flat to surface, upon choosing freeform I get a short overlapping array not following curve. Tried again road option this time, and they follow around the fuselage, but upon close inspection they are standing off at their lower edge .

How do I use ArrayCrv and get them to lay fully on the surface ?

Now to try Pascals.
placed circle centre at start of line on surface, selected surface and distance 25mm, a new circle appeared moving with my mouse, hit enter and it was placed on surface :slight_smile: but that was it, I gained 1 rivet. How do I get them autoplaced 25mm apart ?
Try Miltiple and bingo, however the first two are not 25mm apart, rest are, and the last stage of the command place object, when I have alreadt placed where I want the first rivet, doesnt make sense.

Norsemen23 Thanks but I dont have Python or Grasshopper.


Hi Steve,

Looks like the ArrayCrvPLUS plugin had a bug that did not let you work with a base surface if it was not an extrusion object (the script is quite old and no longer being developed).
It is fixed now. I updated the download link or just use the version attached here. Simply pick the surface your path curve lies on to have your circles oriented to it.

(make sure you uninstall the previous version first…)
ArrayCrvPLUS.rhp (318 KB)

EDIT: Circles oriented on curved surface will not lay fully on it unless you pull them to it afterwards, but then they will no longer be perfect circles…



Hi Pascals ArrayCrvOnSrf makes the circles seem to sit on surface, may suffice for what I am doing, turning them into Make2D.
Whats difference between ArrayCrvOnSrf and ArrayCrvPlus ?

How do I uninstall existing ?
not familiar with rhp files.

Interested to know that guessing at qty of rivets required, if I select 100 and only room for 92 where do the other 7 go ? later to bite me in the bum or just lost and not a problem ?


ArrayCrvPlus is a custom plugin with more options, control and preview, if you need more complex arrays along curve or multiple curves at once.

You can just delete the ArrayCrvPlus.rhp or overwrite it with the new version

you don’t need to worry about the other 8, they are just not created.

Sounds good,
where is this existing rhp to be found and how do I install this one ?


Did you install it before? If not, no need to do anything.
If you did, it will be in the location you saved it into.

To install this one, save it anywhere on your HD and drag-and-drop the file into open Rhino viewport, that should do it.


Where would I look to see if I had done ?


You can start typing ArrayCrvPlus - if it autocompletes, it means it is installed. Or - go to Options > Plugins and see if you can find it on the list - if so, it will also show you the path to the rhp plugin file, so you can find it that way.

The more recent plugins use more convenient installation system via Rhino .rhi format, but this old one is still ‘manual’… You can always try zipping it, renaming .zip into .rhi and double-click to install…


Hi, doesnt autocomplete so never installed.


unable to install, this came from another computer as is blocked to protect this one it says.
Is this a McNeel pedigre plugin ?

never had that before.


Hi Steve- see


Hi, done :slight_smile:
However I have my circle centre 7.3mm from end of line, I select the block instance circle and run arrayCrvPLUS,
Help tab displays nothing so no assistance as to how to have my places circle as start point and 25mm spacing from then. two options from point and edit point dont do anything as there is no point, tried edit and a mess ensues.

asks for centre, I select centre, hit enter ,
path curves, select path hit enter,
number of items, type 100 hit enter,
base surfaces select surface hit enter
circles appear with first at end of line and next 25mm further on, ignoring fact that my first circle was 7mm in, it is now with options count spacing station etc, its gone for 25mm from my initial attempt, no choices to start circle at the one I had placed.
I hit enter as I dont want any of these other options, a dialog boz appears on screen I choose create and I have 25mm spaced circles but starting at tip of line.

Even the ArrayCrvOnSrf placed the second circle nearer the first than 25mm then rest were 25mm,

hours spent trying to place rings 25mm apart along a curve starting with first 7mm in (dim to centre) or the ability to pick where first should be.

anyone care to do a video of this supposed simple task ?


The website link that Andy pointed you to for ArrayCrvPlus has thorough documentation and videos on the workflow. Please read that first.
“From Points” option lest you select predefined points on curve. This way you can divide it using Rhino command and then use points for circle centers. This is optional, depending on your needs.

It does not matter where you place your 'Item" circle. WorldXY plane will be used as a reference to its orientation for XYZ to surface/curve UVW coordinates. The Items will always start at the path starts. You have a choice to either make your path curve shorter and start where you want your first circle center to be, or in ArrayCrvPlus Path menu use AdjustEnds option to define where to start. Again, it is all documented there.

Please note that the distance is measured in curve arc length, and not actual spacing between items, so in areas with more curvature the item-to-item discance will vary slightly. If you want equidistant array spacing, Armadillo has this option; its not a free plugin however.



aha :-)…cheers that website I didnt twig that the videos were all assoc with that ArrayCrvPLUS.

I see the option that I expected to have up front, that of deciding where the array starts, is buried within one of those sub options, as you say within the ‘path’ sub option. One can adjust start and end points.

My short spacing between first two circles was in fact on a flat area, and with it happening in ArrayCrvOnSrf as well, I had failed to get progress.

At least ArrayCrvPLUS allows for movement, the position of the BlockInstance circle at where I wish it to start is irrelevant as the command ignores such and starts at curve start. I dont want to have to have two sets of curves, one chopped to form start and end points.

This ArrayCrvPLUS looking at those videos IS AWESOME !!! :astonished::grinning:

Compulsory for V6 !
Its stuff like that I would expect to see as default in Rhino, so well done the developers of this plugin.

Just wish the video came with sound.
To have the ‘in prog’ help appear not blank but with its videos would be good, to have a weblink appear to that video when running the command would be a suitable substitute. Remembering where the videos lie can be tricky months onwards.

Now I can progress. :thumbsup:


1 Like