How to force trim to always pull curves to its surface?

One thing that’s interesting about NURBS surfacing is that there is no universal modeling technique. Some surface creation tools offer similar end result and usually I try a few of them until I pick the one that performed best in the given situation. It may be “Blend surface”, or “Sweep 2 rails”, or “Network surface”, or “Loft”, or “Extrude”… Most of the time I combine these with “Rebuild UV” and additional point editing to roughly shape the surface according to my intent, then I apply “Match surface”.

Please stop misrepresenting what I have said.
I never said it would work on your surfaces.
In fact I have repeatedly said the opposite - it generally is not going to work with the surfaces you are making.

The advantage of being able to use loose offset is that the output offset surfaces will be no more complicated than the input surfaces.

This discussion started because of your complaint that you can’t trim a small amount off a surface. I have tried to explain that the origins of the problem is a combination of the surfaces not having good tangent continuity and using offsetsrf on the joined surfaces.

If you start with surfaces with good tangent continuity and offset them as individual unjoined surfaces you will not have the problem.

Inability to trim a very tiny fraction off a surface (despite being withing the file tolerance) happens with any individual surface, especially at a steep angle. No need for that surface to be tangent to another surface, or offset surface, or part of a polysurface. The “Trim” and “Split” tools both fail to remove tiny amount of a surface, because they are probably programmed to automatically “snap” to the nearest corner or for whatever reason. This also applies to the “Project curve” tool. Setting the tolerance to be 10x or more accurate solves the issue. You are free to stop repeating about tangent surfaces, because you are beating a dead horse. :slight_smile:

I regularly use loose offset surfaces that then I further improve with point editing and “Match surface”, but they only work in areas where the resulting surface is not trimmed. My example showed a trimmed surface that was surrounded by several adjacent surfaces, so it had to keep its shape less for the very tiny edge that is clearly seen in my 3dm file above. Believe it or not, car body panels are not made entirely by 4-sided patches without trimmed edges. Most of the surfaces are trimmed and used as a base for building other surfaces (usually “Blend surface”, “Sweep 2 rails” or “Network surface”). Some areas need multi-sided transitions, and the best quality finish is to trim a smooth 4-sided surface to make it appear as 3-sided or 5-sided.

Thanks for your reply I appreciate your posts.

So I’ve been using this in Rhino as well for the past 6 months (specifically because of this topic), but I just quite shocklingly discovered that this produces G0 trim edges!

The green surface here is a G3 blend surface, and look at the trim edge it produces:

Now, the rule I’ve learned for the past decade is the following:

A projected curve loses one level of continuity, so if you trim with G2 curves, you get G1 edges. If you trim with G1 curves, you get G0 edges.

However, this doesn’t seem to be true at all for intersecting surfaces (and I just tried it in Alias as well).

How do you work around this?

@Pascal is this not true for the underlying mathematics in Rhino? @John_Brock you like to quote the NURBS definitions to me, do you know? @bobmcneel ?

I might embarrass myself here, but what the heck:


G3 surface/curve/edge used to project normal (pull) trim a surface, always yields a G2 edge. This is predictable. This is set in stone.


Is there a setting I’ve missed in Rhino, or why does this happen? What am I not understanding about Rhino here?

test.stp (17.3 KB)


Try instead using Pull with the Loose option set to yet. After you pull, re-match the end points of your curves so they achieve the continuity you desire. See if this will indeed be close enough to act as a valid split object (within file tolerance). If not, consider upping the degree of your curves, running Pull again, still set to loose then re-match.

ETA - Realize that the curvature of your pulled curves will ALWAYS be better than any trimmed edge. So, if you want/need a super smooth edge, you NEED to find a way to make that edge untrimmed.

That is how the original fin surfaces were created in the first place. But just because you said it, I tried it, and the result is pretty much exactly the same.

Totally understand - in case you missed my edit, realize that to get that kind of curvature on an edge, that edge needs to be untrimmed. You need to define a different patch layout in order to get it that smooth/continuous. Trimmed edges will always always result in less than ideal continuity

Again, this is what I was taught when I learned Nurbs:

You could see my videos, right? They work for other people but me? (Just checking… :slight_smile: ) So you can see the empirical evidence of this. So, again my question, is this not true for Rhino? I’m going to wait for someone from McNeel to confirm for now.

1 Like

It makes a nasty edge for me too! So, it’s not just you. I’d construct it like this instead - my new surfaces in red:

UntrimmedTrimEdge.3dm (80.2 KB)

Lets pause and clarify some terminilogy.

What do you mean by G2 curves? Are you referring to Degree 2 curves?

G2 refers to continuity between curves or segements/spans of curves. Curves are not typically referred to as “Gx”

Degree 2 NURBS curves have G1 (tangency) continuity between spans (unless there are multiknots or stacked control points.)

If you trim with Degree 2 curves the resulting edge will generally have segments with G1 continuity between segments.

1 Like

I don’t see this in practice.

I’m talking only continuity here, as I thought the curvature combs demonstrated.

At no point, neither in the Alias video, nor in the Rhino video, do I inspect the control point/spans (not counting what happens automatically in Rhino when you edit a blend surface).

(I’m beginning to think that the videos aren’t playing for some people. Is that the case?)

Not True. In general a surface with G2 or better continuity (degree 3 or higher) when trimmed with a curve with G2 continuity (degree 3 or higher) will have edges with G2 continuity. The same surface if trimmed with a curve with G1 continuity (degree 2 or higher) will have edges with G1 continuity.

@eobet Please upload a .3dm file (not .stp) with the surfaces which are causing problems. I have an idea of what is causing your problems.

Ok, it’s late, but I’m looking forward to being educated tomorrow! :slight_smile:

The step file shouldn’t make a difference, but the 3dm can be found here.

Both, the “Trim” and “Split” commands heavily depend on the file tolerance settings. They do produce quite different results if you change the tolerance. I already described the issue in the following topic: Dual tolerance option in Rhino?

By the way, I did a continuity check of your file and it says that the edge continuity between the cutting surfaces is G1.

1 Like

I found the same thing. G1 continuity between the cutting surfaces, which result in G1 continuity along the cut edge. Not a surprise.

Ok, this is potentially exciting because I’m about to learn something new about Rhino that I hope will make things “click” for me: How did both of you reach this conclusion? Can you post screenshots?

(Yes, it might seem obvious to you, but I might be in too deep water to even see the surface.) :slight_smile: