TL;DR
The Rhino 9 WIP as of today has a new feature: Multi-sided Surface Patches with the new command MultiSidedPatch. This command lets you to select a set of 3 or more curves and/or surface edges that form a closed outline, to create a smooth* multi-sided mesh or a trimmed NURBS patch fitted to the multi-sided mesh. The trimmed NURBS patch is typically similar or better than the outcome of the existing Patch command, where Patch either does not work at all, gives a result that is not as smooth or gives a result that cannot be joined to adjacent surfaces.edges
mesh
trimmed NURBS patch
joined with pipes and blends - no naked edges
zebra analysis
This functionality is very much under development so you may encounter unexpected behavior or undesired outcomes. We very much like to get your feedback in this topic on what works and what does not, and where we can improve this functionality.
(*) the multi-sided geometry is smooth internally and connects with G1-continuity to surface edges and G0-continuity to normal curves.
Command options
- Resolution (number) - the number of mesh points on each curve, determines how dense the mesh will be.
- Fullness (number) - a number between 0.0 and 1.0 that influences the internal shape
- CreatePatch (yes/no) - no: create a mesh, yes: create a trimmed NURBS patch
- USpans (number) - the number of spans in U-direction to use for the NURBS patch
- VSpans (number) - the number of spans in V-direction to use for the NURBS patch
- Stiffness (number) - the internal stiffness of the control point network of the NURBS patch
- Preview (yes/no) - shows a preview of the mesh or trimmed NURBS patch
When producing a mesh, the Resolution value can be set as high as you need; when using the mesh to inform the NURBS patch fitting with CreatePatch=Yes, the resolution can be chosen coarse, e.g. 10 points per edge as the edges are sampled more finely.
More details
The geometry modeling is based on generalized barycentric interpolation of ribbon surfaces. At each edge, a so-called ribbon surface is created that is matched to the edge, and is aligned with the tangents of the neighboring edges. For surface edges, the ribbon surface is G1-matched to the adjoining surface. A parametric domain is used to generate (u, v) parameters for evaluation. Each (u,v) parameter is converted to generalized barycentric coordinates that indicate which edge contributes how much to the point being evaluated. Lastly, these barycentric coordinates are converted to local (s, t)-parameters on each ribbon surface and the resulting points on each ribbon surface is blended to give a point.The mesh is exact on the interpolated ribbon surfaces, and we’re hoping to eventually make the trimmed NURBS patch as good as this. The trimmed NURBS patch is currently approximated in the same way that the existing Patch command works, which the same shortcomings that that approach has.
Future developments
- “your wishes here” - let us know what works and what needs improvement
- improved smoothness
- better fitting of trimmed NURBS surface to the multi-sided mesh by employing a different fitting strategy
- improved G1- and addition of G2-continuity to surface edges
- chaining tangent curves and edges into one surface side
- concave curve assemblies
Some example files to get you started:
multi-sided-example-1.3dm (64.8 KB)
multi-sided-example-2.3dm (68.3 KB)
multi-sided-example-3.3dm (96.9 KB)