Where is the best thread making video featuring correct method?

Show me where this has a surface that shares a vertice twice:

Thread make4t recopy again remove threads_dims_emod.3dm (13.7 MB)

I did miss the back chamfer on the base thread relief, guess I’ll have to do another version later.

I changed the description of step 2.

  1. Select the cutting objects.
  2. Select the parts of other objects or the cutting objects themselves to trim away.
1 Like

Okay, here is the simplest demo that I should’ve come up with earlier. So if you like, you ditch everything I said earlier, and just look at this example.

The black spiral was created using Rhino’s Spiral command.
The green triangle starts off perfectly square to the spiral axis, and in a plane that contains the axis.

If what you believe is true (which I also believed!) then a Sweep1-roadlike should end with a triangle that is also square to the spiral axis.

Zoom into a Top View of the end triangle which I’ve now made as a red surface, so it’s easier to see. Clearly, the last triangle is not squarely aligned with the helix axis.

You can also see that the iso-lines start to get wonky as the helix spirals inward.

If the triangle were a thread-profile, then the generated threads would not always be cut in a plane that contains the helix axis.

Surprising? I was surprised the first time I realized this. But now it makes sense to me, given that Sweep1-roadlike uses the TNB-frames.

I’ve attached the .3dm file used for the diagrams. Feel free to look at it, or try to reconstruct what I’ve done from scratch.
Tapered Helix Test 2.0.zip (2.2 MB)

That’s better but it really doesn’t cover it.

The way it was designed to work way back in Rhino1 when objects were to be trimmed against each other is the user could pre-select all the intersecting objects then run the trim command and snip off the parts that were to be trimmed away and then hit enter (or right click) then run Join command and your done.

In theory, this could be turned into a macro and trimming and joining would be a one-step operation. That probably wouldn’t be 100% reliable. Its best to see if the trimming works before proceeding to Join.

The point is that trimming them all at once is sort of like a boolean, but far more reliable.than a boolean. When the trimming part fails you can easily determine why it fails. Steve1’s last attempt at trimming and joining the ends of his threads with a cone is a good example. The trimming failed on the cone part because the thread part did not extend far enough to fully cut away the cone part. A boolean operation also will fail but you don’t have the immediate feedback that tells you why it failed. Also, booleans can fail or produce results the user does not want because there can be extraneous intersections that the user doesn’t want involved in the trimming operation. With trimming the user can choose what is to be cutoff and what is not.

The procedure of pre-selecting and running trim and join is more accurate as well as more reliable than trimming individually or using booleans. More than one example can be found in the above discussions. In this example from the above topic discussion thread_end.3dm (551.4 KB) a boolean will work, but if you use that you get noticeably less accurate results. Its as if a different , sloppier intersector code is used for booleans than for trimming. And then people who are hooked on booleans wonder why their booleaned object cause all sorts of downstream failures that they would not have if they used trimming and joining.

I can’t find any fault with your analysis.
However I’m not convinced that in the slight taper of pipe threads it would make much difference and may even enhance the way the threads work or enhance the process of making the threads.

Two points:

(1) I agree that for NPT tapered-pipe-threads the difference is small in practice. This is because for NPT threads, the taper is small, and the helix does not get very close to the helix axis.

(2) My general point is that a lathe-cut thread is the “more correct” way to generate the threads, and Sweep1-roadlike does not do what a lathe does, when making tapered threads.

As for what is better or may enhance the way threads work or are made, I think probably not.

First, you want the threads to mate in a way that is geometrically air-tight. That means the surfaces have to deform as little as possible to form a gas-tight seal in practice. (Okay, some tapered threads are designed to have crests and valleys that form an interference-fit, to create a better seal. But here, we’re mainly concerned with the straight portions of the thread-profile.)

Second, for manufacturability reasons, you want the threads to be easily cut on a lathe (ie: machined in the simplest way). If you were to try to manufacture tapered threads according to Sweep1-roadlike, it would be quite a pain and expensive to do (you might need a fancy 5-axis CNC rather than just a simple lathe).

Well, again, these days, on smaller parts such as fittings, male pipe threads are probably rolled. Not sure how female threads on fittings are most commonly made, but I suspect either with a tap or a form tool. Putting male threads on pipes in the field is usually done with dies.

1 Like

I meant to say that you want the shape of the thread-form (thread-profile) to be easy to cut on a lathe, even if you manufacture it by some other method, like thread-rolling, etc.

I think this is true, although I’m no manufacturing expert. Mostly for three reasons:

First, backwards compatibility (the thread standards were defined before other threading methods were common for mass-production).

Second, you want the tooling (ie: thread-rolling dies, taps, dies) to be easy to manufacture, which means cut, bored, threaded on a lathe, or a mill.

Third, by specifying the thread using the simplest geometry possible, the thread standard becomes the easiest to understand and create. If you were to use Sweep1-roadlike to define a thread-profile, then your thread-standard becomes insanely complex, requiring stuff like vector-calculus TNB-frame things.

Is a ‘tapered spiral’ the same thing as a ‘tapered helix’?

It looks to me that your ‘spiral’ doesn’t follow the proper consistency for the ‘pitch dimension constraint’ for ‘tapered pipe threads’ that would require a ‘pitch’ of some kind to be ‘consistent’ – imo.

A spiral by nature seems to be more of a 2-dimensional asymmetrical entity that, as you’ve shown, doesn’t have a ‘consistent’ spacing relative to tangential flow – or something.

While a helix by nature seems to be more of a 2.5-dimensional entity based more on a circle in one direction and a frequency wave in another direction.

I guess it all gets weird when ppl start messing with the frequency and adding tapers and bending the spoon, especially if the use GH :sweat_smile:

So, in the context of “threads”:
National Pipe Tapered (NPT) vs National Pipe Straight (NPS) - Sanitary Fittings.

The pitch matters most, and generally doesn’t “spiral” in to be ‘zero-diameter’ at the centerline.

In the context of “pipe-threads”, someone probably should verify what the specs are relative to the “taper” and how the thread profile ‘aligns’ to said taper. I think there still may be some confusion there.

If a machinist is machining ‘tapered pipe thread’ on a manual lathe, they might have to use a feed mechanism that can feed on a specific angle relative to centerline of rotation of the spindle spinning the part being made. This would have to be a nicely built machine, imo.

Now, if the machinist doing said operation manually, by using the particular angle to centerline of rotation, would they orient the “60 degree” thread-cutter ‘square’ to centerline or ‘square’ to the taper… assuming they could even ‘feed’ the pitch on such an angle :thinking: :thought_balloon:

This has been on my mind, so I plan to review it eventually. Although I haven’t really seen much on the forum about “tapered pipe threads” yet.

I just don’t think helices and spirals are mutually exclusive. While both involve a curve that winds around a point or axis, the helix progresses linearly in a “third dimension” while the spiral remains in a plane but gets progressively farther from its origin. So, a helix is a “three-dimensional shape”, while a typical spiral is a “two-dimensional shape”.

Now, blending the two into ‘toolpaths’ to make threads on CNC using GH would be awesome :smiley: :coffee:

Nah, I remember cutting tapers on what was probably a '40s vintage South Bend lathe in my advanced metal shop class in 8th grade (1966?). It had a taper attachment you could set at a small angle - I think not more than about 10° - you then disconnected the feed screw from the cross slide and fixed that to the taper attachment so as you fed along the X axis, the cross slide would move in or out along the taper angle. You had to use the tool slide at 90° for feeding in the tool.

(the bar in the back of the image)


Though I never cut any tapered threads, I imagine it would be similar, except you would probably feed the tool slide at 60° and not 90°.


I’m using the terms “helix,” “spiral,” and “tapered helix” somewhat informally.
I think of a tapered helix as a type of helix, as you say, a 2.5d object.

However, Rhino3d calls it a Spiral. Rhino3d–>Curve–>Spiral. So that’s not my preferred terminology, that’s Rhino’s. If you want, we can go to the math directly which skips all the semantics and jargon confusion.

This is basically what I mean by a tapered helix:

In cylindrical coordinates, a point in 3d is specified by:

Our parameterization (in theta) is:
r = k1*z + r0
z = k2 *theta

Where r0 is the starting radius.
k1 is a constant that controls the taper. (If k1=0, then we get a straight helix.)
k2 is a constant that controls the thread pitch.

That’s it.

That should fully define a tapered-helix, or what Rhino calls a Spiral. And it should be the same helix as specified by tapered-thread standards, such as NPT. It’s what you would use as a tapered helix on a lathe with an automated radial-feed, and a length-feed (whatever it’s called).

Whatever you call this shape isn’t too important… What matters is the geometry.

1 Like

Yeah I’m only familiar with auto-feeding @ 0-or-90 deg (on manual lathes). Not sure I ever used a manual lathe that could auto-feed at any other angle…

I guess this is where someone might mention ‘screw machines’ to be more suited for it :slightly_smiling_face: I’m just mostly pondering about the thread profile alignment on a tapered thread is all.

I can agree with all that. I’ll try my best to understand the math and geometry you’re providing. I also plan to study more thread data to help me understand as many profiles as I can.

1 Like

Well, your spiral/helix/whatever is not really how a machine can cut this part - as the normal (the “cutter” axis) does not go through the rotation axis…

The further it spirals in, the further off the curve normal axis is to a line that goes through the rotation center.

1 Like

Actually, this is how a lathe would cut a spiral groove.

The (radial) in-feed is a constant distance per rotation. And that is exactly what this Archimedes spiral is. (In the formula, set k2=0.) Just because the cutting bit is square to the axis lathe does not mean it can’t cut at a slant. That’s one of the reasons (just one of many) that you have a relief angle on the cutting bit.

Three-jaw self-centering chucks have been around for a zillion years. If these were not Archimedian spirals cut on a lathe, then how did they make these (accurately) hundreds of years ago?

And if these are Archimedian spirals, cut on a lathe, well that’s what the diagram shows. And yes, it has some slightly counterintuitive properties. Which is the entire point I’m trying to make.

1 Like

This is an incorrect understanding of 2d spirals… The only curve, that has normals that go through the center of rotation, is a circle. (Okay, the only smooth, simple curve in the 2d plane.) So if what you believe about lathes is true, then lathes can only cut circular forms, and wouldn’t be able to cut spirals and tapered threads. But clearly lathes can cut those shapes, so you may want to reconsider what you think.

Normally, I don’t consider a circle to be a spiral. Every other type of common spiral (Archimedian, geometric, etc.) have normals that do not go through the center of the spiral.

It might be worth learning some calculus (ie: analytical geometry with calculus) to broaden your understanding. Just write down, mathematically, what you mean by a spiral. Then calculate the tangent direction by derivatives. And see where the tangents point. The rotate by 90 degrees to get the normals. Where do they point?

Try it. Do the math. Or have Rhino3d do it for you. Then go look at the results. What spiral would you use?

1 Like

If you are running a classic mechanical lathe, the cutting tool is fixed to the machine carriage and is thus constrained in a horizontal plane that runs through the rotational axis of the machine/workpiece*. It can move in X and Y in that plane but not in Z. It also cannot rotate about itself in any axis – to use flying terms, no pitch, no roll, no yaw.

*I’m considering here a theoretical tool that has zero back rake angle and is positioned with its cutting tip on the workpiece centerline. That kind of a tool might be used for machining brass or acrylic, which actually like zero rake cutting angles

I then took your original triangular cutting profile and oriented it accordingly every 90 degrees around your original spiral (CopiedRadialProfiles). That is how the cutting tool would present itself to the workpiece as it turns in the spindle. I then used all of those profiles with Sweep1 to constrain the sweep around your spiral (Sweep1-CopiedRadialProfiles). Note how the surface so generated has isocurves that all point towards the centerline.

I then sectioned your spiral surface at 90 degrees in order to compare the two results (SectionsThroughOriginal). You can see that they are quite similar at the outer start point, but as they spiral inward, the sections of your surface going through the workpiece rotational axis actually become curved. In any case, although the deviation is minor, they are not the same surface.

Tapered Helix Test - NewSrf.3dm (4.4 MB)

All this is pretty academic because for real low-angle tapered threads like NPT (1.7899°, ¾” per foot – gotta love imperial measurements :smile: ), the difference will most likely far below manufacturing tolerances. Besides, nobody puts NPT pipe threads together without Teflon tape or some kind of sealing goop… :stuck_out_tongue_winking_eye:

As a side note, I learned calculus in high school and took it all the way through vector calculus (div, grad, phi) and matrix algebra in my first year in university. I had the idea to become a civil engineer because I wanted to design and build bridges. I gave up when we got to differential equations because it no longer made much sense to my tiny little brain and went back to architecture and photo. After 50 years, that stuff is sadly long gone from my memory, because in my various jobs I have never needed any of it.

1 Like

Not sure, but I think you’re misunderstanding my point?

My point is that Sweep1-roadlike does not generate the same mathematical surface as a lathe.

And that is what your file “Tapered Helix Test - NewSrf.3dm” demonstrates.
So I think you’re agreeing with my point? The two are different.

Now if you like, you can argue that, yes, there is a difference, but it’s too small to worry about. Okay, fair enough, but it depends on the application.

For example, in the oil-industry, drill-pipe threads have severe tapers of 5:1 and up to 4:1. That’s quite steep. If you, as an engineer, are asked to model such a thread, you’d want to be sure to do it correctly.

Earlier, I said the deviation is small until the helix gets close to the axis, and the taper is large. In NPT threads, the helix is far from the axis, and the taper is small. So the effect is very small. You’re repeating what I said earlier.

For oil-industry drill-pipe, the taper is much larger, and so the effect could matter? I don’t know.

If you have vector calculus already, then you should understand that for a swept-surface, the normal to the surface is not always parallel to the rail-shape. Simply because the “sweep” direction is not always perpendicular to the rail-shape. You can sweep obliquely. That’s what happen very often on a lathe, even if the obliqueness is slight. On a lathe, there is no reason you couldn’t cut a “fast” helix with a “fast” taper.

So I guess I’m confused. Basically you’re saying that I’m mathematically correct, but that it doesn’t matter?

btw, if you look at the thread-generator I posted, it constructs a thread exactly as you mentioned: By orienting thread-profiles square to the helix axis (through a series of rotations around the axis, and translations parallel to the axis) so that the profiles all point directly at the central axis. Then, just like you did, interpolates them into a surface.

So, as far as I can tell, we completely agree with each other on the mathematics.

I thought or think that:
(1) Getting it mathematically correct is interesting.
(2) The deviation from mathematically correct from Sweep1-roadlike can matter, especially for cases with extreme thread-tapers that get near the central axis.
(3) When creating my thread-generator in Grasshopper, I wanted my script to work, even on cases involving extreme thread tapers.

If you don’t care about the mathematical correctness and the error deviation, that’s okay. But as an engineer, you should at least convince yourself that the deviation is too small to matter, and to do that, you have to quantify it. Which more or less means, you need to know how to do it correctly as compared to an approximation.

My whole point is that Sweep1-roadlike generates a mathematical error when making tapered threads. Is the error big enough for you to care? Depends on your specific engineering problem.

I thought this was interesting because, I didn’t realize that (for tapered threads) Sweep1-roadlike created a mathematical error when I first tried it.

1 Like

Feel free to ignore, if you’re uninterested in geomtetry of 2d-spirals.

Earlier I posted an image of a 2d Archimedes spiral, and you could see that when it crossed the X-axis, the tangents varied in angle; those tangents were not parallel.

In an Archimedes spiral, the radius increases linearly. In polar coordinates:
r(theta) = m*theta + k

m is a constant that controls how quickly the spiral expands
k is a constant that determins the starting radius.

In a geometric spiral, the radius increases exponentially, rather than linearly.
r(theta) = b^(theta)

Where b is a constant, and ^ is exponentiation.

Geometric spirals do have the property that they cross the X-axis with parallel tangents.

So that’s cool. But… We don’t use geometric spirals for threading (as far as I know), because each turn of the spiral has a different spacing. That makes it difficult (impossible?) to screw a nut onto a bolt, if the threads are based on geometric spirals.

So comparing Archimedes spirals to geometric spirals, is interesting. You either get evenly-spaced turns, or you get parallel tangnets on the X-axis. But you can’t get both simultaneously.

Here are the files used to generate the diagram.
Geometric Spiral.zip (163.0 KB)

You can also look at involute spirals, which are very interesting for all sorts of reasons (cool geometry), plus they are the basis of involute gears that you see in modern industrial machinery. But like geometric spirals, involute spirals don’t have evenly-spaced turns. So I think they can’t be used for threading. I’ll only discuss that stuff if there’s enough interest.

1 Like

Attention - long post…

I’m not going to get into mathematics here, I’m going to let Rhino do the heavy lifting for the following.

That’s exactly what I decided to model and find out.

Your account of different types of tapered threads and mention of drill pipes intrigued me so I nosed around a bit and found this (admittedly a bit old) discussion:


Plus lots of images of these kinds of pipe ends

– and a long but very detailed video:

From the forum discussion it was not clear whether the threads are cut with the tool perpendicular to the pipe axis or to the taper angle… In the images/videos, it looks more like the first, but I modeled the second case as well just to make sure.

As most of the specs are in inches and I hate messing with imperial measurements, I invented some fictional metric size, but the principle is the same. I chose a 12 degree angle to the centerline which is between the 1:4 (11.3°) and 1:5 (14°) you mentioned. I used a pitch of 4.8mm (about 3/16 of an inch) over 20 turns along the taper angle. It’s maybe a bit on the fine side, but again, this is just for the example. To make it simpler, I didn’t bother rounding the crests or the roots of the thread, as this is a detail that could be added later and doesn’t change the principle.

I made a GH definition to create the spiral, then checked it against the native Rhino spiral command – they look the same. I also made a flat spiral and projected it onto a 12 deg cone, with a similar result, however not a good idea because it becomes a polycurve and ends up creating a mess when sweeping. So I used the Rhino native generated spiral at 12° for all the rest.

I made a 60° cutting tool – actually I have no idea what angle is correct for these type of threads but again, this is just an example.

For the first attempt, I left the cutter perpendicular to the tube axis and swept it along the spiral path with Sweep1, Roadlike Top (because the rotation axis is still the centerline of the pipe). The result looked pretty OK, so I sectioned it every 30 degrees radially and looked at the V’s in the cut section lines. The angle between ranges from 59.997 to 60.000 degrees. For me that’s close enough to 60 degrees – as far as I can calculate, any linear difference would be under 0.2 microns…

For the second attempt – cutter parallel to the taper angle, I angled the cutter at 12 deg to be perpendicular to the taper and did the sweep as before. The resulting V sections have similar measurements to the first. Note I used a tolerance of 0.001mm and 0.01degrees for the file tolerances, so the results are far under those.

I also had a bit of fun creating a one thread runout at the bottom - I guess that’s not how it’s really done, but it ties in with some of the other thread-related subjects in this long topic. I added a 30 degree chamfer at the top for both examples and then “solidified” the surface models.

Tapered Drill Thread EX1-PTRA.3dm (4.1 MB)
Tapered Drill Thread EX2-PTTA.3dm (4.2 MB)

For me, this represents how such a thread would actually be cut on a manual lathe with a taper attachment. For the second example, I have no idea how you would actually set up the correct feed per revolution along the taper axis, as lathe thread gearing is normally set up to cut common pitch inch or metric threads parallel to the rotation axis. So if one of the existing ratios doesn’t work, it might need some special gearing… With a CNC lathe of course, anything is possible.

Finally, as a “real-world” check, I used the male (Pin) thread to create a mating female (Box) part via BooleanDifference. I just assumed full tightness when the thread is against the shoulder - in the video the shoulder is perhaps a bit further away so that the threads have some “tension” as he puts it when the coupling bottoms, but that’s not the point here.

I then tested by unscrewing the top (Box) part in the first example just one degree and moving it up by the corresponding fraction of the pitch. As this is a tapered thread, there should be immediate full disengagement. I then ran Intersect on the two pieces (and waited about 20 sec.) and it finally reported “Found 0 intersections”. So the part is free, there are no interferences.

On the part with the thread cutter perpendicular to the taper, at one degree of rotation I did get one thread crest all the way at the top that reports as a touch intersection. But if I section through it there, I see that the two parts are not actually touching, simply that they are closer than the file tolerance and so Intersect thinks they do touch. At 2 degrees or more of rotation this is gone.

ThreadEngageTest.3dm (8.6 MB)

The tapered thread appears to completely engage/disengage in less than 4 turns – which from what I read seems to be the goal of this type of thread – quick, high-strength assembly of parts plus easy disassembly. In this case ~20 thread engagement is achieved in less than 4 turns. With a classic straight thread it would require all 20 turns.

And finally, as far as I am concerned, this shows that higher angle tapered threads can be modeled correctly with Sweep1 in Rhino. I even tried it with a more extreme example of a 30 degree taper and got similar results.

It was fun doing this exercise and finding out about a whole new class of threaded assemblies that I previously knew nothing about.


I now need to make the threaded hole the male thread goes into, (I am not calling it a nut as it isnt, its in a block.
Is it sufficient to take the male thread and simply OffsetSrf and boolean difference it from the solid block making the threaded hole ?

of something that size of 1.055 inch dia BSC 20TPI what offset would be sufficient for a fit where it can be removed if needed.

Measuring the female thread for another which was 1.06 ext dia I get 1.007 int dia of ‘mountain tops’.

so 1.06 minus 1.007 = 0.053 divide by 2 is an offset of 0.0265 inch

In principle is that ok or is it that the radii retained the same size as on the male thread or some other thing that spoils the simplicity of my idea ?



1 Like