How to get a flat end termination on a helix spring?


You would think someone on You tube or Rhino would show how to make a spring with helix, No. Not a flat ended one anyway as is reality.
Anyone care to do a video ?.. actually begging …would love to see a video, all would benefit on vimeo or youtube.
How to get the last rotation to progressively lose pitch to end up zero pitch ?

attached my helix and the outer limits of the solid spring, I have tried cageEdit and the tip I get to the end line but the spring just before the tip is still lagging behind and remains beyond the end line limit.

Just how is it done ‘mathematically’ for want of a better term, using rules of geometry in other words, not fudged and fiddled until visually ok. The curve, if you split it, is always tangent to the curve at the split. If I get hold of points and fiddle them at some point in doing so I will end up with a non tangent.

My cageEdit method fails, it was:-

  1. create helix
  2. create axis line (the command that draws helix doesnt generate an axis line as such)
  3. Rebuild command the axis line to 10 points. (degree3)
  4. Run cageEdit command, select the helix as the captive object.
  5. Select Control Object is next stage, select the axis, any visible control points vanish, select global, and control points re-appear.
  6. select one at end and nudge sideways, spring tip moves and spiral adjusts, BUT with spring tip now at end limit the spring is kicking out beyond a bit,

flat ended spring.3dm (57.2 KB)

Outer edge of solid (in .3dm file) means the 0.5inch dia solid touches that.

In fact the spring at end is filed flat down to half its thickness where it extends beyond the limit line . I need to get that recreated.


I would make the two ends as separate helices joined to the main body. The end helices would be one turn with a pitch equal to the diameter that will be used to pipe the solid spring.

You can probably get away with moving the end helix so that its start joins the end of the middle one. But to add a little subtlety rotate it 90 degrees about the axis and move it apart from the centre one by a short distance (less than the pitch), then use tangential blend curve between the two portions (a little adjustment of the blend curve control points will be needed to give it a circular profile) and join into one curve before piping. To finish put a line through the end point of the helix and wire cut the taper off the end of the piping and discard.

In the following I only do one end.
Helices (note how they are positioned):





1 Like

variable pitch helix: How do you draw a tilted arc? - #10 by andrew.nowicki

Jeremy, often its good to get away from the screen, ideas occur as such, and I thought of the same initial step, do a single turn with pitch 0.05, you have given me the how to blend it then into the rest method.
The other idea I had was to draw the curve in 2D using elipses, as the turns are elipses if flattened, then project command in side view to a cylinder of the same diameter as the helix. Would that work, should do.

thanks, now I am zero experience in that coding stuff, havent a clue what it does, would not know what to do to get something, I take my hat off to you guys that understand that. As such until I ever get to start to learn it, I will store it in my method folder.
Now if there was a helix command thathad the following options, this would be useful:-
1.Helix start axis
2. Hemix end axis.
3. Helix diameter
4. direction
5. First turn pitch
6. R=repeat 5
7. L=repeat 5 and 6 for last turn
8. Turns between
9. pitch for 8

That would prove useful.


pick axis 0,0 and then r0.5,0 I now have a 0.5inch long axis in front view.
dia 0.505 hit enter
turns type t, hit enter type 1 hit enter
its showing pitch 0.5
type p hit enter type 0.05 hit enter
Turns is now saying 10,
correct T to 1, and pitch becomes 0.5 again.

I am in a tail chase, whats going on ?


blendCrv is not circular in end view

yes the blend is not circular, so its going to be a non geometry shape , a looks good.
What would be the way to get that segment truly circular, I guess my idea of projection to a cylinder.
However it loses tangent exit from the curve, though it is now circular in end view.

Not sure how to solve that.

I gave up on the 10 turns and trimmed one out !


dear @Steve1
i would suggest the following workflow:

  1. draw a _helix with the amount of all turns and extra height.
  2. copy the helix twice vertical, half the height of one turn (blue, red , red in the screenshot)
  3. loft the helix to get a surface like a toilet-paper-roll. (violett)
  4. use some marker (in my case a point) for one turn.
  5. unrollSrfUV with the middle helix and the point → 2d stripe
  6. design the curve - the later helix as desired (green)
  7. flowAlongSrf to get the final curve (green)

please notice that the document-unit-tolerance will define how precise a circle / cylinder is approximated by the helix command.
please note that the loft with option straight is nescessary to get a suface, _unrollSrfUV can handle. (see this post thanks to @davidcockey )

hope this workflows helps - if not - what else do you need - kind regards -tom

helix_discourse.3dm (433.1 KB)
helix_discourse_v5.3dm (689.9 KB)


I would make the spring a little longer than it needs to be with the correct amount of turns.
Then edit the pitch at the helix ends using scale1d on the control points of the end 1-3 turns. As long as you use the axis direction of the helix as the scale1d direction the shape will always remain circular and the number of turns won’t change.
spring.3dm (163.9 KB)

When your done with getting the ends the way you want then you can use scale1d on the entire helix to get the overall length correct.

I have spent hours on trying to draw this flat ended spring now.
Tom_P I need a rest before I try to follow that ! My brain is suffering now.
Image doesnt show flat end result, I will look at file, but…
File wont open in V5.

Jim. @jim
I have selected the control points of the last 3 turns, drawn abbutting circles to show what the first turn spacing (pitch) should be, applied scale1D and get the result attached, whilst it makes that first turn, its getting from there to the second turn, doing so makes them all the same pitch as the first turn.
Looking at the real thing the second turn is less pitch than the rest but as I rotate it the pitch is increasing all the time., as it should, so a logarithmic increase or decrease whichever direction one looks at it, is needed.

Is there a scale 1D logarithmic option ?

Your end result looks ok, but its seeing the steps actually being performed is what I need to achieve it.

You say select the last three turns, I did, apply scale1D I did, and they all take on the same new spacing, leaving the rest of the helix behind. as seen in screen grab.

the helix command needs the steps I suggested above !

Perhaps someone (see initial image) can make me a flat ended spring in the last turn, trimmed flat though half its diameter , overall length after trimmed 1.67inch, dia of helix path 0.505, pipe dia 0.05inch, pitch away from last turn or two is 0.18025 inch.

The key element is the fact that the pitch in a flat ended spring will logarithmically increase over the 2nd and perhaps 3rd turn, and I see no easy way of getting such an increase. I truly wish there was a scale1D logarithmic mode.


Added v5 export to initial post. But you may consider to buy a current licence and support the McNeel / Rhino Team !!


I bought V7 about a year ago !
need win10 pc for it
Have two projects to finish and thus with V5 as it will take me weeks to remake win 7 into win10, 150 progs to go on, all HDDs to change rebuild from the ground up, and folk need my work, before all this happens.

Once I can get the two projects finished I am into win 10 build and weeks out of action.

but rhino is forever dragging me into things such as 1 day to make a spring. if only helix had options as I suggest steps for.


Hi Steve,

I don’t see that in your original photo, so don’t overthink it: if you want to reproduce the spring in the photo (and given the scale indicated) an approximation should suffice.


1 Like

Hi Jeremy,
The geometrical theory of it all is that is what will happen and its the only way to get a smooth transition and increasing pitch from the tight pitch of 0.05inch through to 0.18 within a couple of turns.
I have taken one of the forum offerings and scaled it to be the pitch, dia, length etc and 9 turns and I see a definite change in direction as the curve has to make a move to get to the standard pitch curve, like a race car going onto grass to take a corner. A definite kink. Might not see it at a glance but I am aware one can be flamed for fudging things, that there is a mathematically correct procedure and a wing it fudge it to look the part.
I am considering this also as how one would do it mathematically correct, as is at the root of Rhino methods.

As I hold the item in my hand and rotate it I see the gap between the two ‘pipes’ of metal increasing as I turn it. so its doing that pitch increase with progression of turn.

a scale1d with such progression would be the way.

cageEdit might be the way then to scale1D in that manner, but I cannot fathom it out, I have used axis, and divided into 12, and global option, and the end of the spring bulges out.

How does one scale or stretch something in a logarithmic progression sort of way ?

A helix dia 0.505 with increasing pitch after 1st turn is P=0.05inch until P=0.18025 is attained in 3 turns.

A Rhino advanced helix command ! :grin:


I did not say select 3 turns. I said select the control points of 1-3 turns - meaning you decide how many turns of the end of the spring you want to change. I actually did it in steps, first compressing about 3 turns and then 2 then one turn. Doing it in steps makes it less obvious where the pitch changes.

You need to properly select the base point for scale1d. The points that are farthest from the base points move more than the points closest to the base point. You want the base point aligned with the point that does not move and farthest from the point that you want moved the most. The best place for the base point is on the curve between the last point selected and the next unselected point and then use ortho constraint to define the scale1d direction.

What is your model for then? (n.b. I didn’t read through the whole thread)
If it is only for the purpose of rendering, then this spring really is trivially simple.

You can do that but as I said the change in pitch will be more noticeable if it jumps from .18 to .05 at one place.
spring2.3dm (2.9 MB)

Looking at images arising from an internet search for “coil spring” I don’t see that extended transition. It’s all in the final turn. For example: