Surfaces with very short edges can cause problems while being difficult to find.
A command which counts and highlights short edges is needed, with the user able to specify a parameter for how short the edges need to be to be selected. Either a “Short edges” option for the existing ShowEdges command, or a new ShowShortEdges would work. Highlighting the edges as ShowEdges does is needed.
The user set parameter would not have to be the exact edge length. Instead the maximum length of a bounding box diagonal (used by SelSmall) or similar could be used.
How to find short edges using current commands: Set a layer which does not contain geometry as the current layer. DupEdge with Output=Current Use a crossing box around all the objects to be checked. SelSmall with an appropriate bounding box length to select the short edges The short edges will now be highlighted. Unfortunatley as soon as you select anything else the highlighting of the short edges is lost.
in the meantime, you could probably write a small python script with that functionality
if you need real-time update and persistent highlighting, a grasshopper script might be helpful
Adding to above workflow:
use
_selSmall (Boundingbox Diagonal)
or
_selShortCrv (Curve Length)
and to get a nice view use
_showEnds (Highlight the Endpoints of selected curves / duplicated Edges) - this will also persist unselecting and allow fixing the issues step by step:
rectangular / fence - select from left to select the small curve
_zoom _selected
Rhino definitely has problems with generating edge segments that are too short to be useful or that have no length at all. And therefore users need to defend themselves against this problem.
There a couple problems with your approach. The `Rhino developers have made some effort to hide bad edges in Rhino geometry. DupEdge does not always faithfully reproduce the edge curve. Often DupEdge will “fix” the bad geometry. It can (when it can figure out how) remove stacked control points (AKA zero length edge segments) and small curve segments or hide them in composite curves that SelShortCrv won’t detect.
So you can’t rely on DupEdge to find bad edge curves that are messing up your surfaces and polysurfaces.
Detecting small edges is the best way to find small surfaces. In my experience any surface that is too small to be useful will also have an edge that is too small.
I generally avoid the Rhino tools that create these bad edges so I rarely run across it in my work.
But I see it all the time in geometry posted to this forum.
Looking at the lowest edge on that surface, when you use ExtractWireframe you get the true curve that defines that edge. When you use DupEdge you get a cleaned up version of the curve
Extractwireframe the lowest edge Property Details says its a crappy broken arc:
NURBS arc
center = (185.65734806551859,-71.752524961169499,18)
radius = 43.475570380583612
angle = 88.7151 degrees
start = (155.2622103084048,-102.83726109714394,18)
end = (216.0526693460121,-102.83708164407328,18)
degree = 2
control points: rational, count=5
knots: non-uniform, domain = 0.950857 to 65.2152
clamped at start and end
Curve is not smooth. If you explode it, it will become two or more curves.
DupEdge lower edge Property Details says its a nice clean arc:
Arc
start = (155.2622103084048,-102.83726109714394,18)
end = (216.0526693460121,-102.83708164407329,18)
center = (185.65734806551859,-71.752524961169499,18)
radius = 43.475570380583612
angle = 88.7151 degrees
So there is an example of one short edge segment that using DupEdge would not detect.
but are you sure this curve / edge is part of the surface / brep ?
looking at _list
i only see 6 Edges, 6 Vertices, 6 Trims
also _createUVCrv is not showing it.
just guessing - but maybe this is because _extractWireFrame is somehow part of the graphics pipeline and is not working with double precision ? or it has to do with some other tolerance related stuff…;-(
If you run the extrude command and select that edge as the input, the result is a polysurface. Explode that and you get two surfaces. One of them is 5.59847e-08mm wide.
If instead you first use DupEdge and then extrude that curve you get a single clean surface.
Its pretty clear that the DupEdge command is modifying the curve.
The 5.6e-08 mm piece isn’t a separate edge. It’s a second span inside the bottom edge’s 3D curve, joined to the arc at a full-multiplicity knot. That’s why _List shows only 6 edges.
Since Rhino 8.9, DupEdge returns an arc curve (or a circle) when the edge curve is an arc within zero tolerance. The short span lies along the arc’s end tangent and stays on the arc to well under 1e-10 mm, so this edge passes that test and DupEdge returns a 2-point arc. Edges that aren’t arcs are duplicated as-is.
SelShortCrv measures a whole curve’s length, so it won’t find a span like this inside a longer curve. To find it, run ExtractWireframe on the surface, Explode the extracted curves, then run SelShortCrv.