Network surf tangency continuity

Inside Rhino, network surf with tangency or curvature continuity is easy to do. However, is it possible in Grasshopper? The Grasshopper node only has U, V, and C (continuity level) sliders available. It really seems like the Network Surf node needs a fourth input, one for any surfaces that the U or V curves come from.

Here’s the issue:
In Rhino, use the three black curves and the red surface to make a smooth network surface as shown in step 2. Edge surf does not work properly, as you can see from the zebra analysis. Network surf with only position checked also does not make a smooth surface. Network surf with tangency or curvature continuity makes better surfaces. Curvature continuity makes the best surface in looking at the sharp valley zebra curves.

Can Grasshopper create network surfs with tangency or curvature continuity?

Because the GH network surf node only takes curves as inputs, it does not seem like there’s a way to have GH use a surface edge. The minute you break out a surface edge from the surface, it becomes just a curve and detached from the surface curvature knowledge.

Any help? I found this forum post, but it never seems to really answer the issue: Connecting tangent surface creating with network surface command


GH forum NetworkSurf continuity issue 180613.3dm (84.7 KB)

GH forum NetworkSurf continuity issue (4.7 KB)

These are the options available for network surface in Rhinocommon. (9.6 KB)



the continuity parameter just sets the internal continuity, when the result yields more than one surface. Is it useful? No its not. Grasshopper and Dynamo both are missing strong surface modelling features which makes it very difficult to apply it in any useful modelling szenario. Unless you have access to a stronger surface library you are forced to do workarounds all over the place with very limited success. In Rhinocommon v6 there is a Blend Surface command, the more useful feature: Match surface is not in there yet. Maybe you work with that.
Furthermore, if you create bad initial conditions, even the best algorithm will have trouble in matching continuity.
So as a conclusion: Don‘t do free form surface modelling inside gh. its not the right tool for it.


Is it possible to program additional parameters to the Grasshopper Network Surf command to have an additional input node (or two)?. The additional input node would be for surfaces whose edge curves are the U or V curves already plugged into that network surf command. It seems like Grasshopper simply needs to realize that some of the curves that you are using to create the network surf came from other surfaces and were not isolated curves.

I’m simply comparing the process to Rhino. In Rhino, you only click on the curves you want, but if you click on a surface (for which you have already extracted an edge curve) then Rhino will pop up the mini-dialog box asking you to pick whether you want to choose the curve or the surface edge. All you do is choose the surface edge rather than the extracted curve and you get the tangency continuity.

Rhino Network surface Command is not the same as Rhinocommon(=Gh) Network Surface. The native command can do more because it also matches the newly created surface to the adjacent surfaces. This additional and complex step is not inside the Rhinocommon function. Furthermore curve matching and surface matching is different. Matching two surface is especially difficult, if their iso-curves are not tangent aligned. So even if with full access, your zebras might look weird.

Thanks TomTom, for explaining that there’s a difference between the Rhino command and the Rhinocommon commands. I’m not a programmer and didn’t know that. Hopefully GH can get more advanced in the future so we can build such surfaces parametrically (without Rhino history).


The input to the RhinoCommon function is a list of Curves. If you input only Curves to the Rhino Command, you will only get the position option. If the input curve is a surface edge, Rhino can enforce tangency or curvature.

The Grasshopper workflow generally breaks the connection of the curves to their origin (surface). That is why you will only have Position continuity for the Grasshopper version.

1 Like

Hey, you were right, wasn’t aware of that brepEdge input.

@FlynnAD: here it is (11.0 KB)

However, cps are pretty messy so I doubt this is useful

1 Like

This is really useful!

However, there seems to be a hiccup. In your sample file, all your surfaces join together, which is great.

When I tried it with my original file, the surfaces did not join. I also noticed that they did not join together even when the network surf was made in Rhino unless the (outside) edge curve tolerance was set really low, to 0.0001 rather than the default 0.001.

So I made softer curves for my base surface that, when made in Rhino with a Network Surf with normal (outside) edge tolerance of 0.001, did join into a single surface. I then tried these curves in GH with the netSrf2 command but the resulting network surface was not able to Brep Join. Any ideas why not? Is there a way that the edge tolerance from the command could be added to the command?

New Rhino and GH files attached to test it out.

Thanks for all the help,

NetworkSurf2_nonjoining-surfs.jpg.3dm (236.8 KB) (21.0 KB)

double click on the c# component and modify the numeric values inside that “Rhino.Geometry.NurbsSurface.CreateNetworkSurface” -function. However as said, you create conditions which are impossible to be matched at. You cannot match a surface (at least without adding trillions of controlpoints), when the boundary surface do not allow you to match. To get a good working network surface you need to create 8 surfaces around being connected with the same continuity as your edge should have. edges and isocurves ideally never create a kink in their principal direction (u and v). That’s basic Nurbs modelling knowledge everyone should be aware of.