# Best Practice for Boolean Ops (Under the Hood Complexity Question)

I am making a cutters library that will be used thousands of times with BooleanDiff. When Rhino tries to do the NURBS math for intersections, what type of surface is better? Is a degree 3/20 control point surface faster than a degree 8/9 control point surface?

When I say better, is speed and error rate one is the same? If I had to choose, I would like the least likely to fail option.

Here is an example of 3 options I have for a cutter:

BooleanDiffBestPractice.3dm (221.5 KB)

Perhaps you should wait for an official response but…

Myself, I like making everything with as few nodes as possible.

I try to avoid Booleans with angles that run near edges nearly parallel to edges, like subtracting a cylinder from the inside edge of cube, with features like this:

Which causes issues with floating point; an approximation has to be made somewhere.

For this reason, I routinely make subtraction tools parts that overshoot the edges.

~

I usually give my Boolean tools a special color and material. Mine are transparent orange, as in construction. That way they are not mistaken for positive geometry.

With the geometry you’re showing in your first post, I would make all the objects from trimmed or untrimmed planar surfaces - as simple as possible, degree 1 x 1. That will be the simplest geometry to intersect. After that, it will of course depend on the geometry you’re intersecting with.

–Mitch

That was a simplified example of what my cutter actually looks like. In practice, I flare the ends and strive for tangency in the center.

I imagine all the degree 1 planar math is quite simple and bulletproof, but that would cause an error rate during casting. I get rid of any hard edges in the model and if I need them, hand cut them back into the finished part.

Alignment Points make a nice addition to anything you need to position repeatably : )

@pascal, could you forward this to someone who would know?

Eric, can you post or send me a non-simplified example or two?

-Pascal