How can I have naked edges that are points?

problem_solid.3dm (288.2 KB)
The attached Brep has two naked edges that are points. How can I clean up this object so that I don’t have naked edges? And why would a naked edge ever be a point?

Just as normal edges can be collapsed to a point (a pole or singularity), so can naked edges…

This does look buggy to me - the only remedy I found was to extract the two horizontal (bigger) flat surfaces, dupborder on them, delete the surfaces, simplify the curves, make a new planar surfaces from them and rejoin all…

Do you have a recipe for re-creating this situation?


I’ve written a test command, RemoveNakedMicroLoops, to fix tiny naked edges. It will show up after sr7 is out, and if it tests out ok it will just become a part of the commands that sometimes cause these problems. JoinEdges is the main culprit, along with Join and STEP import.

Usually, these happen when you try to join two edges that look like they should be joined but there is a small edge between the ends that you can’t see. Yours is not the usual situation where we see these naked edges. It would be very helpful to know how this model was made.

Chuck Welsh
Robert McNeel and Associates

1 Like

problem_solid_with_stages.3dm (699.0 KB)

Thanks to both of you. Mitch, your technique to remedy the object worked.

I’ve uploaded a copy of the file with the different stages of constructing the volume. You can see that a shared-edge boolean union between volumes 1 & 2 leaves an edge loop vertex that later becomes the source of the problem.

In short, volumes 1 and 3 are created using lofts & caps of the vertical profiles. vol 2 is created by extruding the horizontal outline, then capping. Volumes 1 and 2 are bool unioned (we’ll call the result vol 1.2), then mergeAllFaces. At this point there are vertices left in the resulting volume, where vols 1 & 2 meet. Vol 1.2 cannot be unioned with vol 3. Instead I exploded all volumes, deleted the surfaces in the intersecting plane, and created one new surface using EdgeSrf.

I should note that I tried to recreate this situation from scratch using simple box-shaped volumes, but I cannot reproduce it. There seems to be something unique about the geometry that causes the error.

Thanks for posting the model. As you said, BooleanUnion does a bad job on vols 1 and 2. If you look at those two polysurfaces before the boolean, and zoom way in right where the extra vertices end up, you can see that the objects are not really adjacent, but overlap slightly. The amount of overlap is about 0.0009, which is very close to the file tolerance. When the noise level in the model is right around tolerance like this, one part of the code may consider two points to be the same, and another consider them different. I’ll put it on the bug list.

Chuck Welsh
Robert McNeel and Associates

Hi Chuck.
Is “RemoveNakedMicroLoops” included in SR7?
I tried it and received an “unknown command”-alert in the command line.
The same for “testRemoveNakedMicroLoops”.

Cheers, Norbert

Hi Norbert-



Ah, okay.
I understood this as "after upgrading to SR7 you will be able to use this test command"

Was this ever implemented? I’m using SR8 and RemoveNakedMicroLoops doesn’t work. Micro edges are driving me bonkers.

Hi Andre- *testRemoveAllNakedMicroLoops" & “testRemoveNakedMicroLoops” They do not autocomplete…

any luck?


Great! Yes, thank-you they worked. Relief at last…
I need to make a full post asking some questions about tolerances, but work keeps getting in the way. I must have some settings incorrect.

Ahh Chuck this is great news! I’ve been seeing this a lot with step imports. Thanks!

…BTW, just seeing your picture here make me realize that you look nothing like Chuck Norris! that’s how I pictured you in my head all these years (fighting those fillets and booleans commando style). Immature, I know, but that’s no news.


That’s funny. You must have forgot that I’m a math geek.

1 Like

RH-23090 is fixed in the latest WIP

1 Like

Thank you guys!

Well, this command - remove the naked micro edges - is enough to make me upgrade to 7 - should have been in 6 however. But wow, thanks. Saved me a lot of time and trouble

RemoveAllNakedMicroEdges is a Rhino 6 command.

When Brian wrote this in Sep '17, Rhino 6 was the WIP. Rhino 6 is now the released product, includes the referenced command, and Rhino 7 is the WIP.

Why is this a command at all? Why doesn’t Join command already handles this on its own?