Concentric Boolean Subtraction oddity

I have a cylinder plus a square helix made from running a square around a rail. (Helix is planar capped.)

I can take a box and perform a Boolean Subtraction on both…

… and it works perfectly.

I then move the square helix down into the cylinder

to attempt a subtraction of the helix from the cylinder concentrically with the outer surface.


This fails.


If I move the square helix up or down concentric with the cylinder it still fails.

If I scale up the edges of the square helix outside the cylinder diameter …
The subtraction still fails.

Now, if I break concentricity… And perform the subtraction … it works fine.

Appreciate any thoughts about why I am not getting the subtraction when the solids are concentric?.

Thanks! Best regards,


The boolean operations are just the automated process of finding intersections between objects and using these to split, trim, and join. If you manually do the first step - i.e. finding the intersection curves - you will see where it fails.

Also, when you do this in Rhino 6 you will get more information at which points boolean operations fail. Booleans should also work a bit better in Rhino 6.

Hi Bruce - can you attach a file with these objects?

Thank you for the reply.

File is attached.
Acme Thread.3dm (257.7 KB)

Best regards,



I wasn’t aware of the intersection test. Thanks! I created a single turn model of the square helix and tried your idea. Clearly there are missed intersections near the ends of the helix.

Intersect Fail

I created a wider helix model that penetrated both inner/outer surfaces of the cylinder and that subtracted correctly.


I used grid snap to construct both the cylinder and helix so the ends of the helix should be congruent full circle.

Best regards,

Hi Bruce - looking at the intersection, it looks like things go awry where the coil emerges from the top of the cylinder-


I think I might make the cylinder taller than the coil, do the Boolean operation then trim the result back to the correct height.



I tried your idea. Here is the taller cylinder with a new revolved square helix with the ends capped. Note that the helix is congruent with the outside diameter of the cylinder, but does not penetrate the inner diameter.

This failed again and I ran the intercept, but this time after rotating the cylinder, I couldn’t find any edges that it failed to find.

TallCyl Intersection

The next thing I tried was to substitute a trapezoid for the square during the rail revolve.

That worked reliably when the subtraction was attempted irrespective of the trapezoidal helix’ placement on the cylinder.


It appears that the boolean difference is somehow sensitive to the profile shape which is run around the rail.

But this get’s me where I need to go!

Many thanks!

Best regards,


Hi Bruce -
Yeah, that will not work, or often not - make it slightly oversized on the outside and it should be fine.


Just a comment on that one…
You are dealing with a tolerance stack here. The helix will be a NURBS curve that is within tolerance of the cylinder. You then use this curve to create another surface - that will be within tolerance of that curve. But chances are that the resulting surface is not within tolerance of the cylinder. That’s why - as Pascal also indicated - it’s better to make sure that your geometry is extending past each other and let Rhino find new edges within tolerance of those surfaces.


That makes sense. Thank you for helping the process of my understanding!!!