Bugs in Rhino 6 + suggestions for the BlendSrf command

Here is an example where “Match surface” could benefit from using curve on a target surface instead of trimming the latter in that area. Use “Continuity: Curvature” and “Preserve other end: Curvature” for this test. Note that on the right side the green curve is just slightly modified by moving one of its control point further by 0,1 mm. However, the “Match target isocurve direction” gets confused and fails to figure out whether to use the U or the V direction for the command. Without a user-set direction, it’s going to cause troubles in similar cases.

CurveNearSurface 1.3dm (466.6 KB)

It would be nice to have, both, manual and automatic align to U or V. The automatic option could prioritize the direction that’s more natural along the majority of target edge or curve, and ignore the minority of the edge that points to the other direction. But I think that adding a “Direction=U”, “Direction=V” and “Both” (the latter is the one currently implemented method that combines both U and V) options in the command line will solve the problem, because the user will have a greater control over the shape. However, for a full control it’s necessary to be able to set different direction to each corner, similar to what I proposed above for the end handles of “Blend surface”. That capability is widely used in other NURBS programs since decades.

Yes, sorry. Since each command in Rhino has its own unique options, it’s very difficult for me to keep track of what a tool can and cannot do, because they all have such similar names yet different ways of controlling them.

Thanks for the tip, I guess I need to start experimenting with this!

You may also try “Geodesic curve” as it will try to find the shortest path between two surface points, which on surfaces with good flow results into a simpler curve with minimum control points. However, as you can see from my 3dm file above, in this particular example using “Interpolate curve on surface” is the better way to do it, because it lets you define the shape of the curve as you desire (closer to your “Variable radius surface blend”).

Just to bring more punch to the party - A simple curve with Pull (or Project) > Loose=Yes and History on, provides a good lofting curve as well, that can be adjusted, from the original.


1 Like

I usually do that with a regular curve that I don’t project on the surface, and even then “Match surface” with the “CurveNearSurface = On” option still works fine. :slight_smile: However, recently I noticed one very strange behaviour of “Match surface” after editing the curve several times while doing some experiments with the 3d model provided by the XNurbs guy. I will try to record a video soon.

Edit: I was not able to repeat that bug, however, it happened when I matched a surface edge to the target surface with the “CurveNearSurface = On” option while skipping to select a target curve. Every time I try to move the end control point of the matched surface it goes to the opposite direction. This way, it will not let the modeler achieve a precise result.


This is not true in general. Here is a counter-example: Short Path v Min CP DC1.3dm (59.2 KB)

It may be true for certain type of surfaces such as flat or ruled surfaces.

Yes, “Geodesic curve” works best on natural shapes with even distribution of the control points. On highly distorted surfaces, like the one seen on your picture, it will build more control points. It also does that on circle shapes.

Yet another shortcoming of the “Blend surface” is the lack of ability to accurately match the tangency direction of the handles. Currently, the handle could be adjusted manually via tapping the Alt key, but the rotation of the handle is fully manual and it’s impossible to match it to the tangency direction of a surface edge. The only way to do so is by preliminary building of curves that extend in a straight line from those surface edges, but that’s both slow and also requires work before using the “Blend surface” command. Here is a suggestion how it could be implemented in a smarter way in a future Rhino 7 update so that the user could opt to use it at any given moment during the command.

PS: Also, take a look at my previous suggestions in this topic regarding “Blend surface”, because currently it’s extremely restricted and a far cry from what it could become in the future. :slight_smile: For example, in VSR for Rhino 5 its own “Blend surface” tool allows to rebuild the surface at any moment within the command, which is a huge deal!


In many instances Rhino 5’s version of the “Blend surface” performed better than that of Rhino 6 and Rhino 7. Sometimes, the “Interior shapes” option introduced by Rhino 6 adds a massive amount of additional control points with no obvious reason (including on very simple input geometry), whereas Rhino 5’s “Blend surface” could achieve the same results with cleaner surface consisting far less control points. To do the same, Rhino 6’ and Rhino 7’s “Blend surface” have to add those extra control points, otherwise it may lose continuity if the “Interior shapes” is turned off.

Also, the handles of the additional interior shapes can’t be controlled in a user-friendly way manually IF the major end handles at either side of the blend surface were modified with the mouse.

Another disadvantage of “Blend surface” is that there is no separate control with dedicated sliders for the opposite handles. For example, the sliders can’t move only one of the handles with number 1 and one of the sliders with number 2. Instead, each of the two sliders controls the entire surface edge simultaneously (both handles from side 1 or both handles from side 2) which is useful sometimes, but may be unwanted in many situations.
If you check my older port at the beginning of this topic I proposed use of 4 sliders instead of 2, with tick boxes allowing to lock 2, 3 or all 4 of them together. So, instead of handle 1 and handle 2, it should have handle 1a, handle 1b, handle 2a and handle 2b. This gives the user a total control over the shape of the blend surface that’s also adjustable with a slider and a numerical input. The “VSR” plug-in for Rhino 5 allowed that function and it was extremely useful.

1 Like

I have a proposition for adding two new options in the command line when the “Planar sections” option is being activated from the pop-up window of the “Blend surface” command.

The first option called “Normal to surface” will let the modeler use a vector direction normal to a surface. This normal vector could be pointed with the mouse anywhere on the target surface in the same fashion as the ! _Line _Normal command.

The second option called “Normal between two surfaces” will do a similar job, except that it will take into account the intermediate vector that’s in-between two manually picked normal vectors on two target surfaces. I captured a video showing the general idea behind the 2nd option.

It would be nice if the vector for the “Planar sections” direction could be further modified, by showing rotational handles around its tip afterwards. The preview of the blend surface that uses a “Planar sections” vector then should update accordingly.

1 Like

Hi Bobi - Does this mean that a single plane is defined by this direction, i.e. a UI convenience for the existing feature, or that the blend section will align to surface normals all along?
If the former, UI convenience, it might be more generally useful to allow picking any plane rather than just a two point one, as InfinitePlane does.


Pascal, I’m afraid that my poor English will not let me understand everything you wrote above. The general idea of the “Planar sections” option is great and it only needs a convenient way to set the direction, because the current implementation asks for two-point directional vector to be set, but in many cases that direction must be at some random angle that’s impossible to define on the go. This is why I proposed two alternative ways to define the direction:

  1. By picking a normal to a surface.
  2. By picking two normals to two surfaces, then using their intermediate vector (kind of a tween curve) as the direction for the planar section.

I think that the second option is more natural, because it lets the user set a relatively universal direction for the planar section that would work in most scenarios. If you have watched my video above, it shows exactly that approach and thanks to the intermediate curve the “Blend surface” command was capable of creating a very clean and straight shape.

OK, got it - so this is a UI for picking a plane, not a different ‘planar sections’ behavior, thanks.

@Rhino_Bulgaria - in your tween plane scenario, the final plane is still determined by two points and the current CPlane - what we’re adding would be UI to get a specific two points. It seems to me that might be helpful - I see what it does in your example. But. How would this work if the input surfaces are not planar and nicely oriented? Presumably there would need to be UI to let you find points along the surfaces and preview the plane interactively etc. Am I correct about that? I can add this as a wish - my guess however is that it is unlikly to make it to the top of the pile soon - I need to test more arbitrary input surfaces to see what the effect might be, but I think unless you get the right points it will be hard to get something useful.

That said I think allowing the general plance getters available elsewhere in Rhino might be good.

It might also be useful to specify a curve - could be one of the edges, or a tween curve between them - that will ‘dynamically’ orient the section planes along the entire blend.


Yes, the way I imagine it is, selecting the “Planar sections” tickbox would evoke two options in the Command line called “Normal to surface” and “Normal between two surfaces”, respectively. Then the user could optionally click on either of these to activate the next step of the command which I described in my earlier post. :slight_smile:

Yeah, I get the workflow up to the selection of the surfaces for normals - my current qualm. or lack of understanding, is that, by itself, such a provision could only work in very limited circumshances - as in your clip. For non-planar input it would abslotely need some sort of adjuster UI to be helpful. That looks like the real request here… I’m sure there could be a way to find a plausible defeult plane most of the time but the liklihood that it will need a tweak seems near 100%, to me.

I want to be sure I understand clearly what we’re going to ask the developer to do…


In my opinion, the best way to set a convenient direction upon activating the “Planar sections” option is to provide an interactive directional vector with 4 handles, so that it could be easily adjusted in any direction manually by the mouse. Then, the preview of the blend surface should adjust accordingly. I showed that in one of my images that I will post here again just in case:

Ideally, that directional vector with handles should appear by default in a direction which is normal to the middle of the blend surface when both of its ends are set to “Position”. Of course, Rhino should do that calculation “secretly”, my video here just shows how I find the middle of the blend surface manually:
Blend surface with advanced Planar sections 2.3dm (212.7 KB)

1 Like

Thanks, I think this UI or something like it is at the core of the request.


1 Like

@Pascal, will it be considered to be added to Rhino in a future update? Since in many occasions “Blend surface” creates the best results with “Planar sections” turned on, it would really help to be able to quickly set the vector direction for the latter. :slight_smile: Especially if that vector could be easily modified so that the preview of “Blend surface” follows the change in direction interactively.

1 Like

Here is a nice example where that option would do wonders. Notice the irregular distribution of the inner rows of control points. The “Relax shape” option could sacrifice the G2 continuity (making it somewhat G1,5) for the sake of a smoother blend surface that will deliver a visually better quality than a true G2 blend.
Or, if the blend surface is set to G1 instead of G2 (as in this example below), the resulting control points should keep their G1 tangency but try to be more consistent. Notice how the inner input surface has two perfectly straight walls that blend together into a smooth corner edge. However, Rhino’s “Blend surface” refuses to replicate those straight and smooth input edges and creates a vastly irregular blend surface whose control points are distributed in a chaotic fashion.

I will add another request for an option called “Mimimum CP lenght”, which is basically the minimum allowed distance between two neighbouring control points based on the number set by the user in scene units (similar to the “Minimum edge length” found in the Mesh density settings). For example, a “Minimum CP lenght” set to 5 mm means that the “Blend surface” tool will be forced to build a loose surface whose control points along the opposite edges will never be closer than 5 mm. That will eliminate the usual issue with blend surfaces having overly-dense control points and irregular flow. The loose nature of the resulting blend surface means that it may not always join to the input surface edges, so a subsequent matching may be required to refine the former.

1 Like

I like the idea of somehow influence the amount of CV’s / Knots that are added by the “refine” option.

May favourite solution would be interactive, showing the edge continuity for G0, G1, G2 while changing the parameters. It would be nice to have 2 parameters
→ maximum amount of CV’s or amount of Knot 's added
→ minimum CV-distance / (or length as you called it)
It also would be nice to manually insert knots while in the dialogue.

current workaround
don t use the refine option. manually _insertKnot and then _matchSrf repetitively until you re satisfied.
Or use _matchSrf with history (which is buggy) and _insertKnot until history will update to the desired precision.

I often do this “surface massage” with _matchSrf (@theoutside called it like this in a video). Not adding knot while matching G2, add a few knots while matching G1, do a final match with G0 and use the refine option and document tolerance to be able to join the surfaces.
this will allow some kind of G1.5 - match.