Boolean Intersection Fails

I found this channel that does quick Plasticity tutorials (video)

Along I come, thinking “Plasicity who? Easy Rhino W”

Lo and behold:

Why doesn’t this work? Is it because of the zero-length distance between the edges of the objects?

I did figure out a workaround, so it does seem that it’s got something to do with the edge of the circular end being perfectly aligned with the flat edge of the solid… but should this not work?

Workaround:

You could just make the intersecting surfaces. Then make the fillets. Then Trim and Join.
dogbone.3dm (316.5 KB)

Seems to work here…

https://www.screencast.com/t/cXmm91Bq

Dogbone-MSH.3dm (2.3 MB)

Hi @vcruzdesigns.

Like for @Helvetosaur the intersection works here. Must be something specific to your model - would you upload it so we can compare?

Thanks
Jeremy

Sure thing:

Boolean Intersection Fail.3dm (469.9 KB)

It works if I run the align command before the Boolean Intersect, but I don’t see why that should be an issue if I’m only pasting a copy in place and rotating it around its center via the Gumball.

Edit: But it does work if I use Alt to duplicate it during one of the Gball rotations :thinking: maybe I wasn’t pasting it in place exactly, but I was using the default ‘cv’ alias so I don’t see why that produces a diff result

Seeing some very odd object intersection curves (select both and run Intersect)… Need to look further.

Ah, didn’t see the inner object - never mind…

Boolean operations fail for me using @vcruzdesigns file.
Works if objects are extended using MoveFace.
Version 7 SR30
(7.30.23130.11001, 2023-05-10)

Hmm, I found a reason for the failure, but am at a loss to explain why it works that way.

If I run Intersect on my attempt (in which the BI succeeds) I get 7 intersection curves - 1 complete trim loop around the outer edges of the object, 4 circles and 2 straight lines at the outer edges where the curved surfaces touch the planar ends. The BI ignores the two straight lines and uses the 6 closed intersection curves to trim and join the parts together.

In the posted example, the Intersect command results in only 6 curves but they are joined differently. The outer edges get joined to the straight lines that are ignored in my example and so result in two open curves (one of which is self-intersecting) instead of one closed loop. This is why the BI fails.

The other thing that is odd is the difference in the isocurve representation of the circular surfaces between my example and his. His surfaces have an extra isocurve that mine don’t… but I can’t see the difference in the surfaces’ structures between the two - both are Sum surfaces from an arc and a line and both have the same number of control points. Both have knots at that point, but the isocurves on mine don’t show up at the knotline.

Maybe it’s a difference in the document settings’ absolute or angle tolerances? My file’s tolerances were set to 0.001mm and 1° respectively.

That said, I don’t think that would be it since I tried rebuilding in your file and I get the extra isocurve you pointed out. Have you constructed yours differently?

Here’s what I did:

  1. Circle from center
  2. Rectangle from center
  3. Explode rectangle
  4. Delete curve closest to circle
  5. Arc tangent to curves from end of one side of the rectangle
  6. Mirror the arc
  7. Select arc curves and trim inside of circle
  8. Select all
  9. Extrude curves, solid = yes, delete input = yes
  10. Run default Rhino cv macro: !_CopyToClipboard _Paste
  11. Rotate via Gumball
  12. Attempt Boolean Intersect

A guess:
ExtrudeCrv was used to create the original objects. The result of ExtrudeCrv can be either a NURBS surface/polysurface object or an extrusion object.

Extrusion objects display isocurves different than NURBS surfaces/polysurfaces.

There may be some differences in the details of the internal code of Intersection, Trim for extrusion objects vs NURBS objects.

Hi @Helvetosaur,

You made your version before Vince posted his and your geometry is different. Might that be enough to account for the extra isocurve? Perhaps remake yours to his dimensions and see if you get a different result?

Regards
Jeremy

I’ll try when I get back… on Sunday. :stuck_out_tongue_winking_eye:

For the record, I’ve disabled the ‘use extrusions when possible’ option

And enjoy your weekend Helvetosaur!

I followed your instructions above and the boolean works. I then went back to your original video and looked for anything different. I found you created the original circle clicking off axis, you created the second circle by offsetting the first. I examined your model carefully and found the centre of the circles is 0.001mm off from (0,0,0). Incorporating these refinements into the construction did not prevent the boolean from working. Your posted model doesn’t boolean here.

Which release of Rhino are you running? I’m on 7.30.23130.11001, 2023-05-10.

1 Like

I see; I’m on 7.29.23107.3001, 2023-04-17.

I just tested it out and I think you’re right.

Offsetting the inner circle produces an outer circle whose center isn’t exactly at the origin, and it also didn’t place the start at exactly 0.

Though predictably, making a circle via a center Osnap does position the circle exactly at the origin.

Edit: also yes, I just tried re-doing it without using offset and it worked. I still get the extra isocurve though, no clue why.

I see that isocurve too, so I think the question is why Helvetosaur’s geometry doesn’t have it. Hopefully we’ll know more on Sunday.

offseting resulting in non concentrical circles is scandalous!

The center of the offset circle is at:
-0.0000000000000003, -0.0000000000000003
which is due to the limitations of double precision floating point math and is extremely unlikely to cause any problems.

This difference is much less than the difference of 0.001 which Jeremy reported above. (Added) That difference has a different cause.

2 Likes