Create surface using corner points and normals

I have troubles finding an easy way to construct a surface based on just 3 points where I can define a normal direction at each of those 3 corner points.

So I have 3 straight line segments (all three lines are not collinear). I want to build a surface in such a way, that those lines would be perpendiculars to the resulting surface.

So far I have to make a bunch perpendiculars, blend them using curves and form a surface using curve network method. Takes a lot of efforts - doesn’t seem to be rational. Is there a shortcut for building a surface using points&normals?

Hi Yan- can you post your file and some indication of the desired results?



Here is a surface I build based on three points - the plain triangle:

What I want is to define normals at those points so the triangle would bend in a way that it’s surface would become perpendicular to those normals at the corner points. In order to define normals I want to use line segments. So the desired result shall look like that:

Hi Yan - something like this, perhaps?

TriangleWithNormals.3dm (63.6 KB)


Yes, the result seem to be correct. But I am more concerned about the way it was done. I am looking for an easy solution that will not require constructing perpendiculars, curves and any other temporary objects - only points and normals to get the surface with desired curvature. It seem to be a straightforvard solution for building a NURBS, but I can’t see any function in Rhino that can do it… :frowning:

I expected to find a function with the following sequence for 3 or 4 control points:
-Select control point (1 of N): …
-Select normal direction for control point 1 (line):
so it expected to let me select a pairs of points and normals for them, and build a NURBS with 3 or 4 corners in result. Nothing I found, sadly.

Hi Yan - Do you want to do this in Rhino as a user, through the existing interface, or are you asking as a developer?


Oh, I feel you are about to say that there is no such function in UI, right? :))

So… Scripting then? Not familiar with, never tried… :((

Yeah, it could be scripted I think - pretty much what I did - you can find the three planes, and build three four-point curves with the ends at the ends of the lines and the next control point on the planes in the direction of the neighboring corner, then build the surface from these curves - I used a Patch, and an EdgeSrf. Another way would be to build a linear surface from corner points, ChangeDegree to 3 in both directions and suck the second points to the relevant plane.


Thank you very much, Pascal! :))

Hi Yan- Here is something you can try, in Python form - (2.6 KB)

You can pick three or four lines (or any curves) , in order, at the end you would like the surface created… Use RunPythonScript or -RunPythonScript, or open the file in EditPythonScript and run it from there…

Any luck with that?


Hi Pascal!
That works great, cool! But… I found smg unfortunate when I tried to create two adjacent surfaces:

As you see, even if two corners are based on the same points and have the same normals at those, the edges do not match. Still, the solution is legit, but not desired. :))

There is a lot of brainwash already, I do not want to take any more of community’s time with that issue - I was just wandering if there is a UI function exists for constructing surfaces like that, and there is none.

Thanks again, Pascal!