Connecting tangent surface creating with network surface command

Hi everybody,

I have a surface which is created in manually in Rhino and another one which is parametric and created in grasshopper and can be changed. Futher, I like to create a surface which is connecting both surfaces, has tangent connections and adjusts when the parametric surface is created.

For privacy reasons I cannot upload my current project and created a simple example to show my problem.

Currently I can only create a surface which is not tangent at the edges. I do not know how to “tell” grasshopper to make the surface tangential.

Is it possible to fulfill this task whith grasshopper or can I create the surface only by baking the parametric surface everytime and then creating the connecting surface manually in Rhino?

unnamed.gh (13.8 KB)
network_surface.3dm (127.3 KB)

1 Like

You want to move the edge of the “manually created green surface” away slightly (or more) and include it in the loft.


tangent_srf_2017Nov14a.gh (22.6 KB) Surface and curve are internalized. no need for Rhino file.

P.S. Oops,I hadn’t looked at it from this angle:
tangent_srf_2017Nov14a2

So I guess you want to use just part of that edge curve?

I think this one is better in two respects:

  1. The ‘Crv’ end points are used to trim the surface edge curve using ‘CLX’ and ‘Shatter’.
  2. Two copies of the trimmed edge are moved instead of just one, which I believe ensures a proper tangent? Or is the third copy redundant?


tangent_srf_2017Nov14b.gh (27.7 KB)

One more try… This creates the tangent surface between two “flat” (but rippled) surfaces. The blue group “flat surface” was called “red surface” in your original code, created by lofting the two curves controlled by the bottom two sliders (43 and 75).

In this version two copies of ‘curve 43’ (so to speak) are moved toward the “manually created green surface” at the same time and by the same values (‘Reverse (Rev)’ X vectors) as the shattered edge of the original surface is moved toward the “flat surface”. Those six lines are merged and lofted to create the transition surface (highlighted), between the two, tangent to both.


tangent_srf_2017Nov14c.gh (30.9 KB)

thanks for your quick response. that is a great solution and works fine for this case. unfortunately, my bigger model is based on the idea of a wireframe with lines in the u and v direction and I cannot create all the surfaces only with lofting. is there a way to do the same thing with the network-surface-command?

Oh, sorry I didn’t notice in your model that the two isocurves are not aligned with the ends of your curve that defines the secondary “flat surface”. It’s easy to use them to trim the edge curve, of course, instead of using the ends of the “flat surface” profile curve.


tangent_srf_2017Nov15a.gh (32.6 KB) (geometry is internalized)

But is there more to it than that? Is the “manually created surface” not flat in the X direction? Meaning you want to use the isocurves as tangent vectors? If so, are they always parallel? Or can the “manually created surface” be twisted?

If it’s rotated (blue group) but not twisted, this will work - replacing the X vector with one isocurve tangent:


tangent_srf_2017Nov15b.gh (46.2 KB) (geometry is internalized)

This is still lofted, not a network surface… I don’t see how you can guarantee that adjacent surfaces can be tangent all along their common edge using only four edge curves. Aside: isn’t a ‘NetSurf’ with only two U curves and two V curves really just an ‘EdgeSrf’?

In my bigger model, which I cannot upload the “manually created surface” is more complex and not flat in the x-direction and I use more than two blends. To vary the connection curves from this “manually created surface” I use intersections with planes instead of isocurves.

“I don’t see how you can guarantee that adjacent surfaces can be tangent all along their common edge using only four edge curves. Aside: isn’t a ‘NetSurf’ with only two U curves and two V curves really just an ‘EdgeSrf’?”

  • In grasshopper the “networksrf” command doesnt work the way I want, but when I use the same command in Rhino I can chose edges from surfaces and decide for every single edge whethere the connection is tangential, has the same curvature, has only the same position or is reduced. Plus, I can also chose edges and curves. In grasshopper the “edgesrf” command is different, as I cannot decide what kind of connection, like tangetial, it should be.

Well, at least the problem description is clearer now. Would have been more obvious if the “manually created green surface” in your model was more representative of the challenge.

Using “intersections with planes instead of isocurves” doesn’t sound right. Here is a sketch using a ‘twisted surface’ that connects isocurves between the two surfaces. ‘Blend Curve (BlendC)’ continuity (‘C’) is set to 1 (‘Tangency’). It looks fair to me?


tangent_srf_2017Nov16a.gh withdrawn in favor of network surface version below.

With the ‘twisted surface’ rotated -24 degrees:

P.S. Oh, sorry, I keep forgetting about network surface. Details! Except for the added functionality of loft options, don’t they give the same result? Maybe not.

Here it is with network surface (‘NetSurf’), in cyan group:


tangent_srf_2017Nov16b.gh (38.5 KB)

Sorry that my problem description was so unclear! Thanks for your new solutions I learned a lot about grasshopper with them.

I try to explain my task/my problem and the difference between lofting and networksrf function with the help of many screenshot and only with Rhino without grasshopper. I hope things get more clear.

01.png I just baked your surfaces and then closed grasshopper.


02.png I extrated two edges from the surface in the middle and deleted the surface in the middle. (those to extracted edges are your blends and those curves are tangential to the outer surfaces)


03.png Now I use the networksrf command. (“Kurven im Netzwerk auswählen” is the German translation)


04.png Now I chose the two edges of those two surfaces and the two curves


05.png I press enter and networksurface function “asks” me about the preferences for each edge. For edge C and A I take tangential.
This step is what I want to reproduce in grasshopper. If I us the grasshopper-network-surface-tool and take the edges of both surfaces as u-direction-input and the curves as v-direction-input the created surface is never tangetial in the connection area at position C and A .


06.png I get a surface which is tangetial at position C and A without any additional input curves like the 50 blending curves you took in your last solution.

The powerful difference between lofting and networksrf in my opinion is, that with the lofting command will never get the same surface with tangetiality if I have only those four curves (or more precise two edges and two curves) as an input. Plus, if at the left was a third surface which was tangential to the other two I could also use an edge at position B and tell it to be tangential.

If I reproduce the same task with grasshopper I dont get the tangentiality to both surfaces. Is it impossible to do so with grasshopper with only those four curves as input? If yes your solution is the perfect workaround.


07.png Here you can see again the area where I have tangentiality.

Hah, yeah but those two edge curves were produced from my ‘Loft’ version and you don’t have those otherwise, though I did get them later without ‘Loft’ in tangent_srf_2017Nov16b.gh using ‘Blend Curve (BlendC)’, which you also used in your original post.

Did you really choose the entire edge of the larger surface? Or did you select the edge curve from the deleted transition surface? I just tested this in the last code I posted and am surprised to learn that ‘NetSurf’ still works without the bits in the dark gray group (‘Flip/Shatter/Item’) that extract part of that edge curve between the isocurve boundaries.
tangent_srf_2017Nov17a
tangent_srf_2017Nov17a.gh (31.3 KB)

Otherwise though, your post today doesn’t tell me anything I didn’t already know. A Rhino tutorial doesn’t help me create a GH solution.

I wanted to select the entire edge of the large surface, but for some reason I could only select a part of the edge. I think it is because it was manipulated in the grasshopper script. If I could chose the entire edge, it gives you the same result, though.

I assume that you know more about Rhino than I do and did not except to tell you anything you didn’t already know. My intention was to explain my problem and task more in detail with those screenshots. My goal is to reproduce step 04.png and 05.png exactly the same with a grasshopper script without any additional code. So that I have only 2 input curves and 2 input edges in the grasshopper script and nothing else. So to speak, just tell grasshopper: “take this edge and all the information about the surface, to create a surface which is tangential at the edge”. This is impossible, isn’t it?

Not necessarily, no.

I’m sorry but I don’t think that’s an accurate description of the problem. You don’t have the edge curves labeled B and D as inputs. You have one edge on each of two surfaces that you want to connect with a transition surface that is tangent to both. In addition, you want to use only part of one of those edge curves, the part of curve C between curves B and D. That part is designated by the two isocurves in your original post. In my last post ( tangent_srf_2017Nov17a.gh ), that part is designated by the two sliders ‘Domain start’ and ‘Domain end’.

What more do you want?