What is a degenerated surface?



Dear Jim,

What do you mean with degenerate surface?


A better example needed for Excercise 59 - Canoe, in training manual level 1
(Dale Fugier) #2

Hi @Bas_Goris,

I’ve moved your question to a new topic.


– Dale

(Michael Pryor) #3

A degenerate surface is a surface which is collapsed to a line or point.


Hi Bas,

besides collapsed or stacked control points, Rhino also does not like it if the U- and V- control points line up with an adjacent surface edge point. Then it fails to calculate proper normal vectors and certain commands fail or create ugly results. Have a look at the attached file and turn on the control points of the black surface. I assume this is what @jim was referring to.

The surface is not “bad” in Rhino terms, so degenerated fits well IMHO.


UV_Tangency.3dm (137.1 KB)


If you look up the dictionary definition"

“lacking some property, order, or distinctness of structure previously or usually present.”

Basically it means a surface that lacks the usual properties needed in order to function well as surface in a CAD application. This is due to the fact that the math does not work as expected.

Rhino’s failure to identify degenerate surfaces is a huge disservice to the Rhino users. Many users think that because there is no warning given that the geometry is good when it is not.
One of the many bad things that may happen is as a result is failure when trying to export geometry to other CAD programs.

CrvDeviation problem

Hi Jess,

Thanks for this answer. Sorry for my late reply. I missed the notifications of this topic.

I see your point of lined up U and V directions. For my understanding I have made some changes to my canoe example. CanoeCurvesTest1b.3dm (245.2 KB)
What I did is this:
step 1 Put the control points on of the surface. I have created a help line between the control points connecting the bow and the bottom centerline curve.

Step 2. Put the control points on of the bow loft curve and drag the second point from the bottom on the created help line. Do the same for the stern. (as the normal loft is recorded by _Record History, the surface is updated.)

Step 3. Check the result by the command _Dir

Now the bow and stern are tangent with the bottom-centre-curve. The U and the V directions at the marked point in above picture are the same, e.g. combined or merged. Is this an example of a degenerate surface? e,g. something to avoid? And if so, are there ways to detect this automatically by McNeel?

Jim, is this what you where referring to?



Hi Bas,

yes, this is a degenerated surface. Simply create an offset of the surface and you’ll see.

As far I know there is no way to automatically detect these “problems” with the current Rhino tool-set. But it should not be too complicated to implement it.



Pascal, Dale, is there a good reason why this is not implemented in Rhino? So a check on collapsed; stacked control points; and a check on lined up U and V directions and a way to see which control point is causing the trouble?



Sure, that would help to avoid critical NURBS topology in the concept phase.

However, there are modeling scenarios which may create degenerated geometry and you cannot allways check all control points at the edges and corners manually. I think some sort of advanced geometry check would not hurt.


I totally agree with this. :slight_smile:


I and others including @jim have asked for this since about V3 - when most of those checks were eliminated… A user configurable function that runs in the background or some options in CheckNewObjects that would warn for things like stacked control points, degenerate srfs, etc. I have never really understood the resistance to this idea.



You might try to answer the question or at least recognize that your comments are tangential to what is being asked and do not respond directly to the question that you quoted.

What is being asked for is a way to alert users when degenerate geometry is created. That’s a very reasonable request. Nobody has asked that Rhino prevent the user from making degenerate geometry. People just want a heads-up when it is created

I find it very annoying when Rhino refuses to produce a result that is degenerate. An example of this is the ProjectToCplane command which will refuse to project a curve if the result is going to be degenerate. I may want to project a silhouette curve to the cplane. That degenerate curve can be used as a reference to create a new clean curve with the same shape that is not degenerate so that curve can be extruded. That’s a common practice for developing parting surfaces. Fortunately, SetPt command does allow the degenerate curve to be made.

(Tom) #16

Sorry, I just had to read your comment to understand what an idiot I was. I have withdrawn all my comment in order to prevent you guys from any meaningless information, unconstructive interpretations and tangential opinions.

@jim you just quoted me wrong, but who cares. If you ever asked yourself why McNeel doesn’t answer these requests, the only true answer is “I don’t know”. Until the next 10 years I won’t reply on any topic @jim is quoted or has replied to.
I hope during this time you start learning coding and implement such simple event by yourself. Its not that you have to be a good programmer for this, you just need to learn some basics about event handling.
If you want some help, use google and type in “events in [your language]”. Easy, doesn’t need 3 more Rhino versions to wait off. Hopefully you will sell it for 800 bucks, I’ll buy and annoy you for 10 more years about some important improvements then :wink:. I wonder if you will listen to me then :thinking:


McNeelies have responded to such requests and to their credit McNeel has implemented a lot of error checking in the last 15 years.

In fact there are very few cases of bad geometry (besides degenerate geometry) that SelBadObjects does not find. And it does report a few degenerate cases The main reason that very little degenerate geometry is included in error checking seems to be that McNeel doesn’t want to offend ship and boat designers who like to use such constructs. As Mitch suggested that could be handled by allowing certain types of bad objects to be excluded by the user.