Why doesn't this boolean work?

Why doesn’t this boolean work ?

Easy boolean fails.gh (54.9 KB)

I start with a curve with perfectly jointed segments, extrude it, then offset the resurting BREP with Pufferfish, and it produces multiple Breps instead of one, so I try to Boolean union, and : no luck :frowning:

Does it work manually in Rhino if you bake them? On an iPad atm so can’t check it myself.

Does it work manually in Rhino if you bake them?

Yep

Having similar problems with Boolean Substraction, for very easy cases.
It looks as though GH booleans have gone bananas.

Easy boolean substraction fails.gh (304.0 KB)

1 Like

Before anyone asks, moving objects to document origin does not help, nor does adjusting document distance tolerance. Looks like you got yourself a gen-u-ine and repeatable bug.

1 Like

Hi Jeremy,

I think that it has something to do with the solids generated by Pufferfish.
In my last example, if I generate the cylinders with GH, the difference works fine.

I agree that I am too far from the origin ; I’m a bit stuck with this unfortunately…

You are working way too far off document center. Most of your breps are about 50 000 document units away from the origin, which isn’t recommended since it messes with the document tolerances.

Furthermore, most of your polysurface extrusions do not result in multiple parts and thus there simply is nothing to union together.
Other extrusions, due to the nature of the polysurface, don’t overlap or meet, so they can’t be united either.

Yes - if you bake the geometry that comes out of the Offset Srf component and then reference this Rhino geometry back into Grasshopper and then run Solid Union on that, this will be successful.
-wim

I have also lived by that assumption for a very long time now but was recently told that this shouldn’t be an issue anymore in Rhino 6. Any cases where this still is an issue should be looked into as a possible bug. (insert can-of-worms emoji here)
-wim

1 Like

This is expected.

I don’t understand why the operation should work in Rhino, and not in GH.

I KNOW I am far from the origin. This is not my choice !

Problems seems to go away when I don’t use the pufferfish offset component.
Certainly a tolerance issue due to the far away origin, but glad GH manages to do the operation properly regardless.

If you bake the offset solids, then bring them back into grasshopper as new breps then a SUnion will work on them…

OK, but efficiency-wise it would probably be smarter to be more selective.

Well, my guess would be that the problem is caused by Pufferfish, too! The component probably uses document tolerances and is thrown off by the huge distance between your geometry and the document origin.
Maybe @Michael_Pryor could explain/look into this?

Here’s an easy, vanilla Grasshopper fix though, using extrusion:

Should work for you, if you aren’t reliant on Pufferfish.

Easy boolean succeeds.gh (34.1 KB)

As a workaround, DeBrep the output from Offset, then Join the DeBrep faces before SUnioning. All unions will then work.

Easy boolean failsv2.gh (50.4 KB)

Regards
Jeremy

Thanks folks,

I did something along these lines and it saved my little pink butt for today.

No, unfortunately the same bug occurs with the original surfaces moved to the origin.
(And the DeBrep / Join solution works at distance.)

1 Like

OK, my solution also works at distance. No Pufferfish needed at all!

1 Like

i try Graft the outcome of offset surface component, and then it works…i have not the component you have between Offset surface and Brep union…( i need download ) anyway it works,

Well, my guess would be that the problem is caused by Pufferfish, too! The component probably uses document tolerances and is thrown off by the huge distance between your geometry and the document origin.
Maybe @Michael_Pryor could explain/look into this?

easy, that component is called “offset surface” not “offset brep” it can offset surfaces and the brep faces, not as entire brep :slight_smile: just have to read the description. Brep offsetting was not introduced into rhinocommon until Rhino 6 and Pufferfish supports Rhino 5.

1 Like

No Pufferfish needed at all!

because Pufferfish component isn’t for that. There are many cases your example will fail as well.

1 Like

The correct answer is to use this method if you are using Rhino 6, just toss it in a C# component.
https://developer.rhino3d.com/api/RhinoCommon/html/M_Rhino_Geometry_Brep_CreateOffsetBrep.htm

In%20your%20Brep%20face