Existing Rhino Functionality to Rebuild Unstructured Quad Layouts from Polyline Surface Boundary Data

I am working on generating watertight unstructured splines in Rhino. There are occasions where such unstructured layouts need to be represented by surface patches in which edges or vertices of the same patch are identified with each other. For example, to rebuild a trimmed annulus as a set of unstructured splines with an single extraordinary point of valence 3 and a single extraordinary point of valence 5, one would expect the following layout (where boundaries of each of the 6 necessary surface patches are depicted in green).

I would like to use existing Rhino functionality (e.g. the rebuild function for boundaries and a sweep or Coons patch interpolation) to create these splines from a dense polyline. However, I face two problems:

  1. The rebuild command makes my closed curves periodic. This means that the location of my extraordinary point may not lie exactly on the curve from which it was built (particularly for even-degree polynomial splines), which is absolutely essential. Is there a way that a curve-fitting can be prescribed in which a closed curve must be interpolatory (clamped) at start and end points?

  2. Rhino offers the sweep with two rails command to generate a single surface patch from two closed boundary curves. Alternatively, the _EdgeSrf command can be used to generate a Coons-patch surface from multiple open curves. However, there does not seem to be any functionality that will rebuild a spline from a (creased) closed curve and an open curve. This means that I cannot find a built-in tool from Rhino to generate the middle surface patch of this annulus (bounded by a closed looop and an open curve). The only alternative I can think of is to split closed curves into a composition of two open curves, but this would unnecessarily increase the complexity of the spline layout.

Does Rhino have tools through which the above unstructured spline layout can be generated (particularly with regards to the two above issues)? Thanks.

Hello - MakeNonperiodic and CrvSeam may help here.


Thanks for the response Pascal. Unfortunately, I need a tool to fit a spline to an ordered set of points that interpolates endpoints. The Rebuild command seems to do this, but am I correct in understanding that it does not have an option to a-priori decide that the fit curve is not periodic? Unfortunately, if I fit (using rebuild) and then use the MakeNonperiodic or CrvSeam commands, the damage has already been done and I will not interpolate the endpoint.

Also, does Rhino have functionality to create a spline patch (e.g. a Coon’s patch) from a creased closed curve and an open curve?

Hello - CurveThroughPt will inerpolate point objects, and InterpCrv will interpolate point locations (xyz) - if you hand either one the points in order, then you can decide on the end point and MakeNonPeriodic should maintain the end point. InterpCrv has a Sharp=Yes/No option to make the curve non-periodic from the start. Any of that help?


Hi Pascal,

Thanks for the response. I’ll use another image to describe the problem:

Say I want to rebuild this trimmed annulus with the minimal number of surface spline patches supporting this configuration of extraordinary points. The rebuilt Brep will contain 6 surface patches and will look as above. I can use the following commands for the following labeled surfaces:

  1. Brep.CreateEdgeSurface
  2. Brep.CreateFromSweep
  3. I cannot find an existing command that works – I have a closed loop closer to the center of the annulus and an open curve closer to the exterior.

Thus, each surface is well-defined except the surface labeled 3, where I cannot find a command that will yield the surface in the white space. As a result, I cannot seem to convert this trimmed surface into an untrimmed Brep.

I have looked at ways to open a closed curve (for the purpose of sweeping, for example), but this discussion seems to signal that this is impossible in Rhino.

Do you have any recommendations on how to generate the surface labeled 3?

Thank you, as always, for your help.

Hello - I see - I guess one way is to start with the curve between 2 and 3 open to create the surface using one of these functions, and then set the end points of the edges after the fact. But I bet you can also create your own nurbs surface with the control points where you want them… I’ll fool around with it is bit and see. We could also ask one of the bigger brains - @dale - can you help?


Hi @Kenny,

Are you generating all this from code or are starting with points or curves? If so, can you post them?

Just curious, what is this exercise for? What problem does this help you solve?

– Dale

Hi Dale and Pascal,

Thanks for the messages. @dale, I am generating all of this from code. However, it’s easy enough to output the curves from which the splines are built: annulus_layout.3dm (53.6 KB) I haven’t yet bothered to fix the appropriate weights to the boundary splines, so you will notice that there is some difference between the original trimmed boundary and the proposed boundary.

The overarching goal is to have a toolkit that can take a trimmed Brep (of a certain quality) and automatically output a representation that is not trimmed and can be usable for both design and analysis. The quadrilateral layout acts as the scaffolding for an unstructured spline. And, if the output is to be a set of B-spline or NURBS patches, the quadrilateral layout describes the boundary of each surface patch.

This is just a simple example of a phenomena that is moderately likely to occur. Similar structures of rebuilt surfaces will happen if you (for example)
(a) Rebuild a genus G closed surface with two valence 4*G extraordinary points.
(b) Rebuild an open genus 0 surface with k>3 boundary components using one EP. (see the image below for doing this where k=3)

I doubt anyone will practically use such high valence EPs for anything beyond genus 2. I guess the point is that these kinds of configurations are not extremely uncommon, and it could be feasible for such a configuration to fit into a portion of a larger Brep. It would be nice to have a way to extract a NURBS/B-spline surface from such a set of bounding curves (particularly one open and one closed).


Hi @dale and @pascal,
Do you have any thoughts about how to generate a surface from such a boundary spline construction (as discussed above)?