TL;DR
Rhino 9 WIP has a new command FillSrf. This command takes a set of curves and surface edges to create a multi-sided patch with positional (G0), tangential (G1) or curvature (G2) continuity to selected surface edges. The command refines the surface in places where the constraints are not met. This command produces better results than the existing Patch command: better conformation to input curves, allowing the patch to be joined without naked edges, better surface smoothness and up to G2 continuity, where Patch only does G1.
Command Options
During curve selection
- Continuity - choose Position(G0), Tangential (G1) or Curvature (G2), this continuity constraint is applied to surface edges. G0 is applied to all normal curves, there is no need to change it while selecting a normal curve. By typing 0, 1 or 2 the continuity is quickly changed.
- Use Ctrl+Click, or Ctrl+Window-Select to deselect curve(s)
Options
- Tolerance (number) - the positional tolerance at the curves selected, defaults to the document tolerance
- AngleTolerance (number) - the angle tolerance in degrees, defaults to the document tolerance
- Preview (yes/no) - show a preview of the surface
- Advanced - show advanced options, for most situations these can stay unchanged
- DegreeU, DegreeV (integer) - the degree of the surface (default 5)
- SpansU, SpansV (integer) - the number of initial spans (default 1)
- Stretching, Bending, RocBending (number) - the ratio of first, second and third derivatives in the energy functional. Defaults to 0, 0.3 and 0.7. Stretching is best kept at 0.
- Refinements (integer) - the maximum number of refinements done to attempt to match the input curves at the requested continuity.
- Domain - choose from Molded (default), Projected, or Untrimmed. This option determines how the parameter domain is created based on the 3d arrangement of the input curves: Projected is a single step projection of the input curves to the best fit plane, while Molded takes this projection and applies the input curves constraints in a number of steps, drawing the surface closer to the curves in each step. Conceptually similar to deep drawing of metal sheets. In case 4 curves are selected that form a closed loop, the Domain defaults to Untrimmed and the result will be an untrimmed NURBS surface. You can make another choice for the domain if you want though, to create a trimmed patch.
Examples
In addition to the examples introduced with MultiSidedPatch (see below), the FillSrf command is able to make more complex patches, like in the following three examples:
fillsrf-example-1.3dm (154.5 KB)
fillsrf-example-2.3dm (246.4 KB)
fillsrf-example-3.3dm (215.3 KB)
This third example shows the untrimmed option for the two four-sided patches, while the corner is created with the aid of the two curves and manual trimming.
//
multisided-example-1.3dm
multisided-example-2.3dm
multisided-example-3.3dm
More details
The modeling is based on treating the NURBS surface as a thin membrane with elasticity and internal strain under bending. This is captured in an "energy" that the surface has, and the algorithm minimizes this energy while complying as much as possible to the positional, tangential and curvature constraints applied. This approach is also known as *variational surfacing* and is similar to what the XNurbs plug-in uses.Future developments
Caveat: the command is under development and its options and result may change without notice.
- “your wishes here” - let us know what works and what needs improvement
- Internal curves, points and normals as constraints
- While it is currently possible to select curves that do not form a closed loop, the results may vary and no trimming is applied.
- A more interactive user experience
- ability to change continuity during the command, currently continuties that are chosen at the start cannot be changed
- ability to add and remove curves during the command
- a dialog with command options
- History support RH-86002
- Grasshopper suppport RH-86003
- Automatic closed loop detection RH-86006
- Starting surface input RH-86009
But what about MultiSidedPatch?
MultiSidedPatch, introduced in November 2024, aims to do the same but has a number of shortcomings that FillSrf does not have:
- MultiSidedPatch is only G1 continuous and it turned out to be difficult to get it to G2
- MultiSidedPatch works best on convex curve assemblies, while FillSrf has more advanced parameterization that allows concave curve assemblies as well
- MultiSidedPatch used the old Patch nurbs fitting, which suffers from the same drawbacks as the Patch command.
- FillSrf has the option to select curves that do not form a closed loop
- FillSrf has the option to select internal curves and points
- The modeling approach used in FillSrf is hopefully versatile enough to improve other surface modeling commands, like fillets, blends and matching.
It is likely that MultiSidedPatch will be removed in favor of FillSrf before v9 is shipped.