Help creating a multipatch NURBS ring with 8 holes


II’m learning how to create geometry for isogeometric analysis (IGA) in Rhino. My aim is to model a 2D ring, which is a circular domain with one central hole and eight smaller circular holes evenly spaced around it.

I want to construct this as a multipatch NURBS surface, rather than a single trimmed surface, so I can later export the NURBS data (control points, knot vectors, and weights) using a Python script I’ve already written.

However, I’m finding it challenging to figure out the best workflow in Rhino for creating such a multipatch 2D geometry suitable for IGA, including dividing the domain into patches, rebuilding them, and maintaining parameter continuity.

If possible, I’d appreciate guidance on the general modeling steps or even a short video tutorial on how to create this type of multipatch NURBS ring with holes.

Untrimmed NURBS surfaces have four boundary edges. You can do this thing with four untrimmed NURBS surfaces. Model the primary domain, reflect it, then rotate-copy to complete the shape.

For “reflect” use the Mirror command.
For “rotate-copy” use the ArrayPolar command.

Another patch arrangement:

Thank you, Lagom and David. I’ll give it a shot and let you know when I’m done or if I need any help.

one more option:

create a segment like that using Sweep2, use the orange as rail
and the blue as sweep shapes


if you would like to experiment with one extreme by creating a single untrimmed surface from these use MergeSrf and option smooth unchecked, for this you have to explode the 3 surfaces first then use MergeSrf.

you will have an awkward isocurve arrangement but maybe that does not matter for you.

Thank you, @encephalon. I will try your idea. Here’s what I did :sweat_smile:, but I’ll keep trying until I figure it out.


Here’s what I did, but why can’t it display more control points for one patch? I only got 4 control points. If I export its data,It displays different on another software.

The question mentions no trimmed surfaces, so why use trimmed surfaces? This question smacks of a classic XY-problem.

It’s a rectangular surface which has been trimmed.

Did you use PlanarSrf? If so it creates a rectangular planar surface and then trims that surface with the input curve.

EdgeSrf will create an untirmmed surface from 2, 3 or 4 input curves. If 2 or 3 curves are used as input then the resulting surface will have one or two sides with zero length, which may or may not be acceptable for the destination software.

What level of parameter continuity is required?

C⁰ continuity between patches.


Thank you all for your support! Now I understand the process better.
I created
three arcs for the small hole,
one arc for the inner boundary,
and one for the outer boundary.

Then I added a line connecting the inner and outer arcs.

With these curves ready, I used the EdgeSrf command:

  • First, I selected two curves — the outer arc with part of the small hole arc.

  • Then another pair — the connecting line with another part of the small hole arc.

  • Finally, I selected the inner arc with part of the small hole.

After that, I used the Mirror command to reflect the geometry and the ArrayPolar command to rotate and complete the full ring.

This is my first test in Rhino, and I’m very happy with the result.

Thank you everyone for your help!