Request - Show Short Edges

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.

An example of a problem short edge surface is in this thread: Rhino says model is good. Slicer finds "Non-manifold" edges - #12 by CalypsoArt

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

happy modelling -tom

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.

Dear @jim great you re chiming in.
you have a sample .3dm for this ?
best -tom

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.

Take the model posted in this thread that started this discussion. I enclose a file with one surface from that model:
DupEdge.3dm (54.5 KB)

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.

very strange - I agree:

with a length of 0.00000005598 mm
and a wonderful _curvaturegraph ;-D

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…;-(

shall we (AT)Dale and ask ?

So you think it might be just my imagination?

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.

Hope this helps.

– Dale