Boolean Operations

Most of what I use when designing something hinges on boolean functions. I either split, union or sometimes use boolean difference. However, there are few things more frustrating than importing a circuit board where the traces are converted into blocks with round ends… It’s at this point I want to break all the blocks, then union all the individual parts. Yes, the block issue is a pain, and breaking everything takes time and makes the file difficult to manage. Then I start joining the traces with a boolean union. It seems anything will fail the union. I can usually find the joint where several intersecting circles are causing the issue. The problem is, I would have selected a large group of traces to apply the function, so I have to hunt for the offending joint that failed the union. And yes, dropping the tolerance in the model does not help.

Would it not be easier if the boolean operation could simply skip the joint that it failed on and continue with the others? This would improve this task tremendously.

The second thing that kills me is a boolean union that deletes parts from the union. So, if I have a few traces that need merging, I apply the union function and it will complete the union, no errors… while also deleting some of the parts it was supposed to merge. I’m not talking overlapping objects within other objects, I’m talking about whole parts that only overlap the group slightly.

Lastly, all this work takes time. Mostly because boolean operations are not multithreaded. What’s the point of having 16 cores if only one core is allowed to do the work. A 30 second wait for a union should take no more than a few seconds at most.

Anyone have advice on anything in my morning rant?

Hard to know without a file… I don’t know what you’re expecting from Boolean operations, but they are not “Hallelujah, it’s a miracle” type of operations - the input geometry has to be good for them to work properly. Failures can almost always be attributed to out of tolerance situations.

Yes, tolerance is a contributor. However, if I union a small group of parts and the operation decides to delete one in the process, sometimes I only have to union a few parts first, and then it will join with the others. Sometimes I have to include a part in my selection - that isn’t touching any part in the group, and somehow that allows the group to union without deleting any parts.

It’s like the boolean union function only applies to some of the parts, and other parts get a different type of boolean function… like boolean difference.

99% of my work is sensitive. So I can only upload a small selection of what I’m dealing with. In this file you will see two traces. Both have parts that need to merge. Any combination of this part with that part results in one of the parts somehow being deleted.
Trace_test.3dm (3.0 MB)

Wow. 10kb of shapes makes a 3MB file? This is R7 BTW.

Hi Ken - this happens when one or more input objects is not closed.
In your example, coincident seams and surfaces seem to be the problem… it should work. That said, I would, in this case at least, do all the work with the curves defining the shapes (CurveBoolean) and then extrude.


Yes. Working with just the curves will solve it. However, when I import a PCB step file, there are thousands of individual curves on a single layer, then there are 4 layers per side, and up to 9 PCB sides (internally),… and that’s just one board of 12 in a given everyday project. So, ya, I’m really looking for a sustainable solution.

Hi Ken - can you please send one of these step files to to my attention, with a link back to this topic in your comments?


curve boolean may be more powerful in this situation than you realize… (or maybe you do and this will help others)

you can have a pile of curve that all create close shapes but are super messy inside. As long as the exterior border creates the shape you want, the interiors can be a mess…

you can select outside the curves to clean them all up at once.

see this example

one click and this all cleans up-

Pascal. I’ll see if I can find a step file I’m allowed to send. And also, something small enough.

Pascal. Email sent.


Hi Ken - thanks, opening now…