Single Span double curved surfaces: Manually position control points to achieve G1 continuity

Hello Rhino Gurus!

I am trying to understand the whether / how to manually position surface control points to achieve G1 continuity.
So, for curves, tangency is achieved by aligning the 2 last points of a curve as seen in level 2 training.

What about for surfaces ? Aside from the automatic tools like ‘Match Surfaces’ and the manual ctr ptsG1 Cont Simple Example.3dm (487.9 KB) editing tools (Drag, UVN etc) is there a geometric construction that allows to position the second to last row of UV points (points 4 to 7 in the image below) so as to achieve G1.
What are the degrees of freedom for these points without breaking continuity (infered) – not refering to endbulge (automatic tool) but more to “these points can move in a plane obtained from …” for ex. ?

Enclosed an image and a 3dm model of a simple case made up of 2 surfaces Degree 3/ 4 Control points. (U&V)

Many thanks,

Hi Jean - if your surfaces have the same structure and matching points across the edge, then moving the tangent points in line, as in a pair of curves, plus making the distance to the points on one side a single multiple of the distances on the other surface’s points, will get you perfect tangency.

e.g. if surface A’s pt0 to pt7 spacing is 2x surface B’s 0-7 spacing, then all the others (2-6, 1-5, 0-4) should also be in a 2:1 ratio, if you see what I mean.

SurfacesTangent.3dm (54.5 KB)



This is so cool !
It does not need to be the an integer multiple… Just the same multiple across the row. Got it.
Now this works fine in when isoparametrics are aligned. But what is the more general case when end control points meet but control points 0-4 surface A are not colinear with 0-4 surface B.
Case of 3 edges meeting at a single control point and wanting to avoid 2 of these edges being tangent to one another.
This is the case of turning 3 faces of a cube manually editing their control points to achieve G1 across faces.
Then, for points 0 (3 of them) I gather there is a double constraint that need to be satisfied Surface A to C and A to B…
Many thanks again.

@pascal Do you know of any references about why the points on one side need to be a multiple of the points on the other side?

Hi David - I do not - to me, this is a cool and useful trick, but not something I can explain any further I’m afraid. @lowell may have an idea, he is the surface matcher.


I am still working to find the correct manual method to position surface CP to achieve G1 continuity when Surface Isos meet at an Angle.
— On the basic case where first rows of CPs are aligned and follow the ‘pascal’ rule:

plus making the distance to the points on one side a single multiple of the distances on the other surface’s points

Initial State

Orange curve is a section of the 2 Surfaces normal to the Surfaces (mid point of joined edge).
Angle measure is 0. It is G1 Continous perfectly (as it follows the pascal rule).

Now, if I move point A5 in the control polygon’s direction (In direction of point B5), I break the tangency.
The Angle reported is 0.14deg.

If I use the Match Surface command to achieve Tan continuity:

  1. The resulting Angle on the section curve is: 0.093deg.
  2. The command moved both points A5 and A6…
  3. Tightening the Angle tolerance in the Prefs does not appear to improve the result (here they are set at 0.05deg).

In this simple case, knowledge of the correct positionning of CPs appears to result in a better outcome than using the command.

I will move to the more general case… And try to see what can be inferred empirically.
I am personnally convinced that having an understanding of these principles are required to achieve good surf continuity…


since you are trying to match two double curved surfaces with no symmetry, it is not sufficent to match the tangents in one direction. So the mechanism for curves do not work the same. When you only adjust a single tangent you always change the inner curvature flow of the surface. This is why its so important to produce clean, smooth and equally cv-distributed surfaces. When I was doing professional car exterior modelling (using Icem Surf), we often refined a g1 matching manually. You can match g1 even without aligning the cv hull/isocurves. But you at least need to already be close to g1 to manual match. Otherwise its too difficult.
The first thing you need is tangency deviation analysis, showing the deviation at around 50 points at your matching edge. This graph, looking similar to a curvature graph, helping you to identify the local discontinuities, which usually vary much. You also need to reduce the sensitivity of moving the cp drastically. Changing the tangency of a surface happends in really tiny steps. Maybe I can show you some pictures later on. But it is feasable by creating surface clean to manually match a surface down to 0.01 degrees. You might noticed that you impact g1 not only by moving cps normal, but also in any other direction. Thats why it so difficult on a bigger scale.

This describes the new EdgeContinuity tool in the V7 WIP.


Here is an example I already posted some years ago. On the buttom edge you clearly see the deviation graph making a sine like movement. But with this tool I was able match a surface with less cps to a surface with more cps manually. Usually anything under 0.05 degrees is considered as a g1 match. (Although it might not look nice regarding the cps distribution, this difficult blend was located in area of strong curvature changes and multiple fillets passing in):