I created a SubD sphere, converted it to NURBS, and then exploded it to get the current surface. To my surprise, this surface is reported as an untrimmed surface, but it has eight edges. Based on my previous understanding, an untrimmed surface should have four edges. This is quite strange. Can anyone help analyze this? Thank you very much!
Which version of Rhino is that?
rhino8 ![]()
If I run _What on that object I get a slightly different display, but it doesn’t say the object is untrimmed - it is more that it doesn’t say the object is trimmed, as it does with other objects that are.
I can’t read all your display so I don’t know where you are seeing it say the object is untrimmed. However, your display does say there are 8 trims.
I think your display is saying that the trimmed object has the same geometry as the untrimmed one. If you run _UntrimAll to see the four original untrimmed edges you will find the locations coincide with the trimmed edges, but the trims require more curves and stop at the corners.
Certainly an untrimmed NURBS surface has four edges. This isn’t a new breed of NURBS!
By checking the object’s additional information through Rhino’s List command, this can be observed. My personal understanding is that this might be related to the packing algorithm in ToNURBS. Through some kind of fusion algorithm, multiple surfaces are merged into a single surface, which could explain the appearance of this untrimmed surface with eight edges.
My guess is there are split edges. An edge can be split into multiple edges. You can MergeEdges to remove splits.
Thank you, yes, you are right. When I executed the UntrimAll command, the edges reduced to four. What happened?
MergeEdges do not work
MergeEdge
The MergeEdge command doesn’t work either
If you untrim the exploded surface with the keep trims option you will get the 8 trim curves as well as the untrimmed surface. You will see that the trims lie on the untrimmed edges. If you create new curves by copying the surface edges you will see how the four untrimmed edges match up to the trim curves.
(i might not use “mulit-knot”, “fully multiple knot” and “kink” with 100% technical correctness:)
as far as i see / understand there are fully multiple knots (“tangential kinks”) at those positions.
if you select this row of CVs and move it normal (_moveUVN) you can see the multiplied knots behavior:
_removeKnot will show a continuous edge
(
_removeMultiKnot with remove fully multiple Knots, max kink angle = 180 will also do the jog)_makeUniform will keep all CVs and set up new Knot vectors…
and looking at the knot vectors of the original surface
(command _list)
you can see the underlaying structure and the multi-knot / kinks
Knot Vector 1 ( 57 knots )
index value mult delta
0 -2 3
3 -1.75 1 0.25
4 -1.5 1 0.25
5 -1.25 1 0.25
6 -1 1 0.25
7 -0.5 1 0.5
8 0 1 0.5
9 1 1 1
10 2 1 1
11 3 1 1
12 4 1 1
13 4.5 1 0.5
14 5 1 0.5
15 5.25 1 0.25
16 5.5 1 0.25
17 5.75 1 0.25
18 6 3 0.25 <-- kink
21 6.25 1 0.25
22 6.5 1 0.25
23 6.75 1 0.25
24 7 1 0.25
25 7.5 1 0.5
26 8 1 0.5
27 9 1 1
28 10 1 1
29 11 1 1
30 12 1 1
31 12.5 1 0.5
32 13 1 0.5
33 13.25 1 0.25
34 13.5 1 0.25
35 13.75 1 0.25
36 14 3 0.25 <-- kink
39 14.25 1 0.25
40 14.5 1 0.25
41 14.75 1 0.25
42 15 1 0.25
43 15.5 1 0.5
44 16 1 0.5
45 17 1 1
46 18 1 1
47 19 1 1
48 20 1 1
49 20.5 1 0.5
50 21 1 0.5
51 21.25 1 0.25
52 21.5 1 0.25
53 21.75 1 0.25
54 22 3 0.25
you can also build stuff like this:
you can _mergeSrf (Smooth = No) 3 sides of a dice - and you will get a surfaces - that is represented as a Brep with 8 edges.
to reverse it to 3 surfaces / a polysurface:
_DivideAlongCreases
hope this helps - kind regards - tom
To add for clarity: trimmed edges again. As before, remove the trims and you get a single surface with the usual four untrimmed NURBS edges.
Wow, you’re brilliant. It seriously took me over two hours and some help from an AI to really unpack what you said. Thanks so much, I really appreciate it. So, it looks like the packing algorithm in `ToNURBS` and the `MergeSrf` algorithm are fundamentally similar. I’m still stuck on a few things, though. A surface with 8 edges… doesn’t that go against the basic logic of a surface having four sides? When you use `MergeSrf`, a surface with fully-multiple knots stays as a single surface, but its edges get broken up at those knots. But if you run `UntrimAll`, the same kind of surface can stay single *and* keep its edges in one piece. I’m a little confused.
There is a distinction to be made between a Brep and a Surface. When you deal with a “surface” in Rhino, you mostly deal with the Brep (unless you are doing UV surface stuff). The number of edges you see listed (eight) relate to the Brep. The surface only has four. Like the edge curves and trims, the surface is a component part of the Brep.
When you untrim the Brep you remove whatever trim curves are there, but a Brep always (?) has trims so new trims that coincide with the surface edges are added. That’s why you see four edges & trims listed after the untrim.
Note that if you untrim the two Breps that constitute the sphere, giving each four edges, then join them back into a polysurface, before exploding again, you will find that Rhino will have retrimmed each with eight edges. Perhaps @davidcockey or @Tom_P, who understand NURBS much better than I, can explain why that is necessary for the join process.
i am not sure, if a pure Nurbs-Surface can be alive in an open Rhino document without being “decorated” inside a single-surface Brep following above scheme.**
The Edges / Edge count you see in the Document / that are reported in _what and _list are E0…E7 and belong to the Brep typology / taxonomy.
my guess: To represent a Nurbs-Surface as single-Face-Brep is a developer decision to unify user experience like point-snapping, the behaviour of many commands, and many more aspects…
if you look at the developer info of a simple surface
_list
you will see
ON_Brep:
(B-rep geometry is the same as underlying surface.)
** the 3dm file format and the SDK allows Adding Surface-Objects. But maybe they are only written as though - but interpreted as Brep as soon as the document is read - but this is only a guess…
Maybe it would be more explanatory to call the Edges of a Nurbs-Surface “Domain-Limits” or “Parameter-Space-Edges” - and there are always 4.
Those “Parameter-Space-Edges” can also have length 0.
The corresponding Brep will have 3 Edges:
@jeremy5 @Tom_P Thank you so much! Thanks to your patient answers, I’m slowly starting to get it. I realize now that I never really understood the exact difference between a Brep and a Surface. Rhino’s algorithms and commands are mostly focused on the Brep, on the topology level. A native surface mathematically has just four edges, but topologically, it can have many. This has been incredibly insightful, and my understanding of Rhino is much deeper now
Once I understood the separation and unification of topological representation (Brep) and NURBS geometric definition (Surface), I immediately realized that many problems I couldn’t figure out before, even some so-called “bugs,” were all instantly resolved. Wow, my understanding of Rhino has never been this clear. Thank you so much!






