Where is the best thread making video featuring correct method?

hb this one?

I did criticize it myself, but that doesn’t mean there’s nothing to learn from it. Edison made the lightbulb many wrong ways before he found the right ways.

I think part of the implication here is I might not have needed to use “solid” entities for the boolean:

I’m not 100% sure.

Mostly the effect of making it solid, will alter the normals of the surface (outward) so the boolean will work. But his point is that if I flip the normals instead, it will probably work without being solidified…

I’ve just never exploited this knowledge yet, because I usually used ‘solids’ in my workflow. I do plan to test this new procedure (to me) in my techniques to find out if I understand it correctly.

I guess I don’t pay enough attention to the normals as much as I thought I did.

At 16:50 I did boolean without cone being solid so I guess that proves it doesn’t need solid:

Alot of my knowledge in Rhino is still subconscious, so it’s interesting to explicate that into the conscious and reinforce what I think I know into what I know I know :joy:

Just need to refine my technique and pay attention to them ‘normals’ more :grin:

Did better the second time at 19:16 weew! :sweat_smile: :rofl: and again at 23:25 lol so 100% sure booleans don’t need solid. Glad that’s no longer subconscious! And learned more about ‘normals’ :beers:

So funny at 35 min my brain went ‘derp solid?’ :rofl: :sob:

I should have studied this other thread sooner :smirk: :

me too

There’s many examples of GH version technology out there and already mentioned. Here’s an example:

Yes, ‘helix’ is key for threads. Maybe someday GH will make a component and easier.

24 days ago you almost made it seem like you were done with this part “in 10 min”:

Guess you still need threads and you didn’t study my vid or any other vid well enough to learn about helixes to make threads?

This will be key for the future and automating this matter:

‘Helical interpolation’ is key for CNC milling threads with a thread cutter – fwiw. You could technically follow any curve really… and make custom entrances and exits. It all depends on CNC toolpath techniques, thread cutter geometry, and GD&T’s.

3D printers are still (basically) 2.5D machines, so the thread geometry will probably have to be compensating for several emergent properties of such a characteristical process, etc.

5 min later. Okay so I’ve been doing some more review, and yes there’s still not very many good videos on thread making (specifically in Rhino).

But here’s one I haven’t seen yet fwiw: https://youtu.be/gWtbbXFpE0k?si=D2bYXDt_vpqnLgjs
Well maybe I’ve seen it once lol.

I just wanted to make four quick notes:

(1) Telling beginners to “just read the manual” (RTFM) or “lemme google that for you” (LMGTF) is not helpful, and is common problem in toxic online communities. If that is your gut-reaction (which can be legit), then just don’t reply. Let others answer.

(2) Sweep1 and Sweep2 do work for straight threads. So you can make a helix, and sweep a thread profile along the helix (use “Roadlike” feature in Sweep1). This will generate a mathematically correct straight thread.

(3) Tapered threads are surprisingly subtle, in my opinion. I’m speaking as someone who tried to use Sweep1 and Sweep2 to create tapered threads. And then I wondered why my surfaces would not always stitch together into a watertight solid. Sometimes it did, and sometimes it didn’t. Turns out, mathematically it won’t stitch together, but if your tolerance is big enough, Rhino might let you get away with it. I’ll post more about this soon (later today or tomorrow). To understand this at a technical level, you need some vector calculus, namely the TNB frame. Sweep1 uses the TNB frame, so you need at least a conceptual understanding of it, to know why it fails only on tapered threads.

(4) Rhino is not perfect, and so some construction methods that are mathematically correct, will fail. For example, surface patches that have holes and/or internal edges will sometimes confuse Rhino, and it won’t stitch the surfaces together. In these cases, you can usually split some of the surfaces so that each patch is simple (no internal edges, no holes).

Simplest example is something like a “rectangular strip” that is actually a loop, like a bandsaw blade. So two edges of the “rectangle” are joined together, and that is an internal edge. If you split this into two rectangles, then Rhino is more likely to process it correctly. (Okay, if your surface is non-orientable, then it still won’t work. Probably mobius-strips and klein-bottles won’t work in Rhino, no matter how you slice it into patches?)

Why do I mention this? Because I’ve had the following experience: I’ve used sweep1 to create a thread along a helix. The threaded part is a single surface patch, which is supposed to have internal edges where a thread and the next turn of the thread seam together. In my experience, Rhino did not understand the internal edges, and Make Solid would fail.

But a simple work-around was to cut the threads in half, by a plane that goes through the axis of the bolt. This slices the single-surface into many smaller surfaces (two patches per thread turn) that are individually simple. After that, Rhino would successfully Make Solid and stitch everything into a watertight solid.

Is this obvious? Not to me.

P.S. Rhino obviously handles some internal edges correctly. For example, spheres and revolved objects have an internal edge, and are no problem. But, other more complicated examples seem to cause problems.

1 Like

Those aren’t called edges. They are called seams and they behave differently than edges.
For a seam to exist the start and end in the U or V direction have to be the same. Seams are created when the surface is created. There is no joining or unjoining involved. Seams may or may not be periodic.
I don’t think its ever permitted for any edge of a surface to be joined to any other edge of that same surface even if they are within tolerance. I don’t think any other CAD program handles this any different than Rhino.


Thanks Jim!

That was very helpful. I called them “edges” just because the Rhino user-interface calls them edges. If you make a sphere, and click on the seam, the command line says,“1 edge selected.”

But it’s good to know they’re not actually edges, and have their own special terminology and properties. Makes sense to me.

1 Like

They’re actually called “seam edges”.

Open (unjoined) edges are called “boundary edges”
Joined edges are called “manifold edges” (unless they are non-manifold)
Seams are called "seam edges"
Poles (singularities) are called “singular edges”


Below is a demonstration that Sweep1 cannot be used to model a tapered-thread in a way that is “mathematically correct.”

(1) I was originally going to post this to a separate thread, but I can’t decide if that would be better. If forum moderators want to move it to a new thread, that’s totally fine with me.
(2) The discussion below is mostly to “demonstrate” by example that Sweep1 is incompatible with a tapered-thread.
(3) I’ll mention some vague intuition about why there is a problem.
(4) I’m open to a full-blown technical discussion, but that’s probably not useful to 99.99% of the people here. It could be done at the level of undergraduate vector-calculus.
(5) I have some more intuition about what is happening, but it is very awkward to explain in words. If you have a good way to understand this intuitively, then please let us know. That would be great!
(6) The .3dm files for all of the diagrams are attached to this post at the end.

Review of Curvature and the TNB-frame

Suppose we have a curve in 3d, that smoothly goes which every way. We can then analyze a specific point on the curve. For example, for a point on the curve, we have the tangent, as well as the curvature circle.

In the picture, our curve is in black, and the green-point on the line is where we will analyze the curve. The green line is a tangent line. The tangent-line is the line that best-fits the curve. The green circle is the circle-of-curvature. The circle-of-curvature represents the circle that best-fits the curve.

(In vector calculus, we take the vague intuition of “best fit line” and “best fit circle” and make them mathematically precise, and then prove formulas about them.)

The circle-of-curvature has a radius r. The red line-segment is from the circle-center to the point on the curve. As you probably know, the radius r is the radius-of-curvature. And the curvature is defined as 1/r. The tighter the bend, the smaller the radius, and consequently, the greater the curvature.

To represent the curvature at the point, we draw an extension of the red-line which has length 1/r, and is tied to the point on the curve. This is the blue line-segment, which we draw on the opposite side from the circle. So to be clear, the red and blue line segments are part of the same (infinite) line.

What we want is an XYZ coordinate-frame for every point on our curve. How can we do this? Well, the tangent (green line) and a line to the center-of-curvature (red line) are perpendicular. Plus, they intersect at our point-of-interest on the curve.

(For you semi-technical and technical people: we know the red-line and green-line are perpendicular because: The best-fit-circle (green circle) is tangent to the curve (black). So they share the same tangent. And, of course, a circle’s tangent is perpendicular to the corresponding radius.)

So naturally, we can choose our origin to be at the point in question. And our X-axis will be along the green line. Our Y-axis can then point towards the center of the circle of curvature. Our Z-axis is then defined by the right-hand-rule and the fact that it is perpendicular to the XY-plane.

So, for every point on the curve, we have a set of local coordinates. If we were a point travelling along the curve, then our X-axis is our tangent (our direction of travel), our Y-axis is towards the center-of-curvature (represents which way we are turning or curving in 3d), and that fixes our Z-axis.

In Rhino and most 3d visualizations, we don’t draw the radius-of-curvature (red), but instead draw a curvature vector (blue). In Rhino, we access this by Analyze–>Curve–>Curvature Graph.

This XYZ-coordinate frame is known as the TNB frame. If you want more details about it, you can check Wikipedia or any textbook for vector calculus.

A description of Sweep1 “Roadlike”

We can imagine “driving in a car” down the curve (black). As we do so, we keep the front of the car pointed along the tangent at all times (“X-axis”). And say, we keep our right-side pointing along the curvature vector (blue) (“Y-axis”). Our head then points “up” (“Z-axis”).

Now suppose we want Rhino3d to perform a Sweep1 operation with “Roadlike” setting. Start our car at the beginning of the sweep-rail. Then rigidly attach the sweep-shape to the car. Note that the sweep-shape might be at an odd position and/or orientation relative to the car. But whatever its orientation/position is, we rigidly attach it to the car (say with steel beams or something).

We drive the car down the sweep-rail, as described. If we look, the sweep-shape moves rigidly with the car, and sweeps out a surface. Sweep1-roadlike creates this surface.

A Straight Helix behaves as expected.

Okay, as a simple exercise, we look at a straight helix.

The yellow line is the central axis of the helix. And as before, we’ve selected a point o the helix, and drawn the tangent (green line), circle-of-curvature (green circle), radius-of-curvature (red line) and a curvature vector (blue line).

Given the symmetry of a helix, you might expect that the curvature vector (blue) and the red-line are on a line that intersects the central axis (yellow) at a right-angle (perpendicular). If you expect this, then congrats, your intuition is correct.

(Not important, but interesting: In the figure, the green dot is the center of the circle-of-curvature, which (usually) lies slightly off of the helix axis. Why? Because a helix is a circle in the xy-plane that has been “stretched” in the z-direction. That stretching slightly expands the circle-of-curvature, and pushes the circle-of-curvature off of the helix axis (yellow).)

For our helix, we have shown that every curvature vector is perpendicular to the helix axis, and if extended would intersect the helix axis.

To illustrate this, we draw two things:
(1) For every point on the helix, we draw a line to the central axis. Naturally, this sweeps out an Archimedes screw. These lines are parallel to the world xy-plane.
(2) We ask Rhino3d to draw a curvature-graph of our helix.

For now, please ignore the magenta curve; we’ll get to the tapered helix later.

Archimedes spiral for our helix:

Helix with curvature-graph and Archimedes spiral.

The “hairs” of the curvature graph are curvature-vectors. And we know they should be perpendicular to the helix axis, and if extended would intersect the helix axis. Our helix-axis is along the world Z-axis. Therefore, any side-view of this should show perfectly horizontal lines. And indeed, that is what we get.

Analysis of Tapered Helix

So far, we’ve reviewed tangents, circles-of-curvature, curvature-vectors, Sweep1-roadlike, and a simple straight helix.

So what happens in a tapered helix? What do you think?

(Q1) Do we think a tapered helix should have curvature-vectors that are perpendicular to the helix-axis?
(Q2) Should the curvature-vectors, if extended, intersect the helix axis?

I thought the answer to these questions was “yes.” I was wrong.

If you have strong geometric intuition, then you’ll realize that if you take a straight-helix and “squish” it into a tapered-helix, you will be likely to change the curvature-circles in all sorts of ways so that either (Q1) or (Q2) or both are false.

Here is our tapered-helix in magenta. For reference, I’ve drawn our straight-helix in black. They start at the same diameter, and have the same number of turns per length. As before, the yellow line is the axis for both helices, and points along the world Z-axis.

So let’s make our “Archimedes Screw” as before. From every point on the tapered-helix, we drop a perpendicular to the central axis. And as expected, this generates a tapered Archimedes Screw.

Finally, let’s draw a curvature-graph of the tapered helix.

Whoa! What happened? As the tapered helix winds more closely to the axis, the curvature increases. That means bigger curvature vectors.

Okay, kewl, more curvature near the axis. What about the direction of the curvature vectors? Let’s look at a side view.

Whoa, those curvature vectors are definitely not perpendicular to the helix axis!

Do the curvature vectors intersect the helix axis? Let’s test one point on the tapered-helix.

Nope. For the tapered helix, the curvature vectors are not perpendicular to the helix axis. Nor do they intersect the helix axis.

What does this mean for Tapered Threads and Sweep1-roadlike?

First let’s look at why Sweep1-roadlike will work correctly for straight threads:

For the straight-helix, we drove our car along the rail, and we kept our left-side always pointing towards the center-of-curvature. And we showed earlier, that our left-side will point directly and perpendicularly towards the helix axis. Our car’s orientation relative to the helix-axis is always the same. To a camera mounted onto the car-top, the helix-axis is always in the same position, orientation, and distance from the car. If the helix-axis were an infinite line, the camera would see no changes in the axis as we drove along the rail.

Remember that our sweep-shape has been rigidly “bolted” to our car. So, like the camera, the sweep-shape sees no change of position, orientation, nor distance from the central axis (except of course moving up and down the axis).

Therefore if our sweep-shape lies in a plane that contains the helix axis, it will maintain that alignment throughout the entire drive. If we start the sweep-shape in a plane that contains the helix-axis, then it will always be in a plane that contains the helix axis as we drive along the rail.

If our sweep-shape was a thread-profile, then our thread-profile would always be aligned with the helix-axis (in a plane that contains both). This is great, because it is exactly like how threads are cut on a lathe: the cutter is a triangle (usually 60 degrees) that lies in a plane that also contains the lathe axis (helix axis).

So no problem! You can use Sweep1-roadlike to create “mathematically perfect” straight threads. Just sweep your thread-profile along a straight helix.

Next, let’s look at why Sweep1-roadlike will not work for tapered-threads.

By “not work” I mean be mathematically incorrect. Although, if the taper is slight (say for NPT tapered pipe threads), the result might have an error that is too small for you to care. But if you are doing gas-tight high-precision threads, then you probably should care.

Remember that as we drove along a straight-helix, the helix-axis did not move relative to our car.

But, if you look carefully at the curvature-graph, you will see that the curvature-vectors sometimes point almost perpendicular to the central axis, and other times are more skewed and less perpendicular.

In other words, if you drive along a tapered helix, and orient your car in the same way as Sweep1-roadlike does (with tangent and curvature-vector), then you will see the helix-axis move around. To a camera mounted on the car, the axis will change position, orientation, and distance to the car. Your left-side will not point directly and perpendicularly at the central axis. And sometimes it will point closer or farther from the axis, and sometimes be more perpendicular or less perpendicular to the axis.

This is terrible! Because it means the rail-shape you have bolted to the car will not maintain a constant relationship to the helix axis. If your rail-shape is a thread profile, then you cannot guarantee that it will always be in a plane that contains the helix-axis.

Therefore, if you use Sweep1-roadlike to make a tapered-thread, you will fail. During the Sweep1-roadlike, your thread-profile will go out-of-plane, not to mention not always be square (perpendicular) to the thread axis.

In conclusion:

Sweep1-roadlike uses curvature-vectors and curve-tangents to orient sweep-shapes along the sweep-rails. For a tapered helix, these orientations change in unexpected ways up and down the tapered helix. This prevents us from using Sweep1-roadlike from making tapered threads.

However, Sweep1-roadlike is mathematically correct for straight threads.

Straight Helix

Tapered Helix

Here is a .zip file with the .3dm and .png files used for the diagrams. Feel free to play with them. And let me know if I made a mistake, or if you have questions.
Tapered Thread Analysis 1.0.0.zip (6.6 MB)

I wish I had more time to improve this explanation and post. Hopefully, although not great, it was still useful to some of you. If you do need to make tapered threads accurately, I would suggests two possibilities:
(1) Download a CAD file of a part with the required thread (such as from www.mcmaster.com, CADGrab, etc.)
(2) You could try using my thread generator, which is a Grasshopper script.
Asking for Feedback: ChiralSym Thread Generator (4.5.3)

–Anthony K. Yan

P.S. A different analysis shows that Sweep2 will also fail, for reasons that are similar in flavor, but with technical differences. Sweep2 will generate curvature-vectors that are perpendicular to the central axis (ie: parallel to the world XY-plane in our example), but do not intersect the helix axis when extended. And the “gap” of the non-intersection effectively changes as you drive along the tapered helix.

1 Like

Yes, I gave you props on this in another permutation of this same subject matter about 20 days prior:

I don’t see what tapered vs straight would be any different relative to what’s possible. I look forward to studying your examples, as I remain skeptical.

I look forward to it.

Indeed that seems to be the case in common scenarios, yet thread-rolling is probably done by machines, hence they’re machined.

I can also use a ‘form tap’ with ‘roll forming geometry’, on a CNC milling machine to machine threads.

Yes, because the grain and molecules of thread forming machining operations transforms the material differently than cutting does, then you’d have to model the geometry accordingly. It’s merely just a different profile. I could demonstrate it if there’s no links here yet.

That’s awesome. I really like that show. I appreciate the links.

Maybe I’m the one guilty of that for throwing a few rough jabs. Yeah I was probably having a bad day at first, but hope I was still somewhat friendly, and I’m sorry for those actions, but I’m better now.

I guess I lost some tolerance recentlyt, and I remain skeptical that a member of about 10yrs is still just a beginner.

Although, I (myself) have also been learning some things lately, with this subject matter, and I’m experiencing some lessons that make me realize I’m still ‘relatively’ a beginner – even after so many yrs :joy: :sob: :smiling_face_with_tear: So, if someone thinks I need to read a book or manual, just lemme know! :sweat_smile:

Perhaps I need to read a book on vector calculus :exploding_head:

Idk bout vector calculus but it might just be a matter of how you setup your thread “cutting/forming” profile geometry?..

I’ll be trying to see what you mean by this.

It might just be a matter of how the threads are “cut/formed”. Indeed there’s many recipes for this and I’m not sure if GH makes it any easier, yet.

Hi Jim,
:sob: but I I took YOUR file yet couldnt get the one surface to trim the other, whilst you had managed it.

You will see here in forum thread I say I am using the Jim Trim method.
But then cannot get your file to trim your work.

I want to follow the method being shown me, and followed Tom_P for the helix and adjustment of profile,

so if barely within tolerance \and I followed Tom_P exactly, as he said it would minimise chances of failure, you say its barely within tolerance.
Yet to me his copy a half helix seemed a sound concept to minimise problems.
Jeremy then said to fit to a solid core, alter proflie to how I originally had it.
Then he shows the Jim Trim and I follow that. I declare I am wanting to follow Jim Trim.

Just that I cant get the rear end to trim.
and perhaps someone can escape the other debate going on and just show me how to trim it ?
a la Jeremy method.

This 1 day job is into week 2.

I am wanting to know how to boil an egg and a lot of debate about how to open a restaurant, all good stuff for folk , but I need to get this egg boiled and I am a whisker from doing so. but cannot trim. Can someone take the file and see why ?

and as for avoiding that skimming of the previous thread, Jim and I have had that happen, so again, solution anyone, or is it ok ?



1 Like

Those P/6’s arent’ making sense to me, so I’ll have to reference a different chart.

I agree. It’s been years in the making it would seem. But that kinda adds to the dilemma, cause even GH doesn’t make helix easy, or thread automation easy. And not many accurate / concise youtube vids for Rhino yet either.

And I really don’t agree with this approach:

The only way that can make sense to me is if you’re using ‘helical interpolation’ on a mill in half-turn increments. And I think mills can do full helical, so why half-turn then ‘array’. It’s interesting though.

Yeah, I don’t really see it that way. I’m working on an alternative to show soon, hopefully.

Heh heh. You already told us that you did not do what I did.
You wrote:

That is definitely not what I did.
What I did was I selected both polysurfaces and ran the trim command. Then I clicked on the parts that were sticking out of each polysurf and those parts disappeared. I then ran the join command and saved and posted the result in my reply.

As I said before what you did (trimming with unjoined surfaces) might have worked if your geometry was accurate enough, but since it wasn’t very accurate it didn’t work, but don’t blame me or Rhino for that.

1 Like

I haven’t waded thru all that you wrote (I probably will when time allows) but my intuition tells me a tapered thread should not behave the same as a straight thread. It has a different purpose. The tapered threads are supposed to jam together while straight threads are not.

Also the spiral that defines a tapered thread is (or should be) consistent throughout so any deviation from the normal frame should also be consistent throughout. Are you seeing something different?

1 Like

the idea behind not doing a full, but only a half turn:

  • avoid that a suface shares a vertice twice in the final PolySurface (red x dot)
  • make sure that pull (which is part of most trim-Actions) has a easier job.

I remember some older CAD-exercises (not in Rhino) where Cylinders where represented with two 180-degree turns / surfaces.

And pull quite often does a messy job on special surfaces - see this topic:
(which never got much attention)

attached YOUR file.

I click the red cone, and select trim and click the grey thread and it goes.
I then click the grey thread and select trim and click the red cone overhand and nothing happens.

I cannot do anymore than that and explain that I cannot get your file to trim away the red cone.

as for my tolerance being poor or my build quality is rubbish, I have been meticulous, snaps very carefully done, drawn to the BSC chart. P is pitch 0.05 and P/6 means just that.

Just where is my drawing work faulty ?

I am lost for words on why nothing is understood. Lander.

Tom_P is more experienced than me and I would have been flamed for not following a more experienced user. but getting burnt anyway.

Can anyone else open Jims file and manage to trim the red cone away using selecting the joined grey thread and the trim command ?

PLEAZE SOMEONE TRY. on Jims file…why does V5 fail ?

because I cannot…and all I want to do is trim my rear end cone and thats this damn thing done !

and I have had enough of three simple threads being beyond 20Mb posting limit, just what the hell is going on. No textures in it.

1am and not had eve meal yet.

thread_end Jim Rhino red cuts thread but then thread wont cut red.3dm (844.7 KB)


thread_end Jim_trim_join_tp.3dm (934.5 KB)

select the edges not the surface - at least in V7 it works - don t have a runing V5 version on this machine

attached file should be V5

Ah yet again you found another way different than mine that fails. You really do have a lot of time to spare to try different approaches.

This method, also, would likely work if your geometry was more accurate.

what I did using Rhino5:

Hi Steve,

You have to select the grey piece and the red piece before hitting CTRL-T, then select the grey bit you want gone, then the red bit you want gone, then hit return to finish. Think of this as the Mutually Assured Destruction variant of Trim!

Trying to select just one piece and trimming the other, followed by selecting the second to trim the first does not work because the second trim fails. (Although this can be rescued by taking the intersection between the truncated piece and the untrimmed piece and using that to trim the latter.)

When you come to do the other end, know that, in Rhino 5 at least, there will be some positions where even the MAD trim won’t work because Rhino can’t solve the intersection. If you are unlucky enough to hit that problem you will need to nudge the end piece along the axis a little and/or adjust the slope of the shoulder slightly to get a working intersection.


Since you ask…
The geometry is faulty where the threads join together.
This is what it looks like before the threads are joined:

There is a pretty big gap between threads right where the red cone intersects the black threads
surface_mismatch.3dm (409.9 KB)

I have never done a mirual trim before, was not aware of that method, I always do the standard select trim, select cutter then select item to be trimmed, following its prompts.

thread_end Jim Rhino pick red and grey trim and pick red and grey works.3dm (1.1 MB)

Jim Mutual trim works :star_struck:

A new method for us all.

Now I dont understand why that is and not one at a time, but obviously what one needs for a cut is not there in stage 2 of normal trim.

Accuracy, I followed Tom_P half a helix, and linear array.
was my initial profile faulty, as I thought I was being hyper careful, using mirror to create a full profile, I will have to redo the profile and see where it went wrong.

Here it is.
Thread make2.3dm (855.7 KB)

Hi Jeremy, perhaps with a redone profile it might work.


Well, not really. It’s been available since… Rhino 1.0 (I just tested). :stuck_out_tongue_winking_eye:

True, the Help does not specifically say that both cutters and objects to trim can be selected in one go… @KelvinC - maybe an additional note could be added to the Help topic to this effect?