Creating patterns on polysurfaces

One of the reasons for picking up Rhino and subsequently Grasshopper was a desire to create patterns and details on top of surface geometry. I’m almost always importing STEP / IGES geometry into Rhino and then trying to work with those surfaces. So here’s an example of a simple imported part:


My goal here would be to create some kind of pattern over this polysurface. However the trouble I’m running into is:

1.) Using Rhino tools like Flow Along Surface etc. only seems to work on a surface, not on polysurfaces. So achieving any kind of uniform pattern distribution over this surface seems tricky.

2.) Using Grasshopper I’m struggling to get subdivsions of a polysurface. I can load the geometry into a BREP node etc. but then I run into the following issues:

I guess the question is: How do I treat a polysurface as a single surface in order to effectively create patterns and features over it.

Any suggestions on how to approach this?

This question comes up a lot. I usually use panelingtools to re-parameterize the grid to get what I want.

In order to get a consistent evenly spaced grid on a joined Brep is to section he shape at a consistent way, then re-construct as a grid. Something panelingtools does.

The model here could use some refinement around the edges, but you can see the grid is turning the corner.

1 Like

Thanks, will take a look an panelingtools.

I simplified the previous example into two separate surfaces that I again tried to create an even distribution of points on (via grasshopper) but I can’t get it to happen. I feel like maybe I’m barking up the wrong tree with grasshopper (and maybe even rhino?) as almost every grasshopper & rhino tutorial deals with single surfaces created in rhino or grasshopper. Have yet to find anything dealing with polysurfaces.

Obviously rebuilding as a single surface feature works fine, but this doesn’t seem feasible with more complex geometry in multiple directions. And even with this simple geometry, the rebuilt single surface has deviated in small ways from the geometry of the original which isn’t ideal either.

Hi @ftzuk
When you have polysurfaces that need to be populated by uniform pattern, there is typically one of 2 approaches you can use depending on the form:
1- Rebuild the polysurface into a surface with desired UV directions, and build the grid by dividing the surface UV.
2- Extract curves in the desired spacing and direction, and build the grid by dividing the curves.

Now that is said, closed, or almost closed polysurfaces are the hardest to deal with because they typically cannot be represented in one surface or one set of curves. Matching the grid in multiple patches can be tricky, but doable with some work.
If you share an example file and desired pattern (expected outcome), then we might be able to help further.


Here is an example with complex Polysurface reconstructed to populate pattern continuously in 2 different ways. The main trick is in identifying the set of curves to have best coverage and distribution of modules. (411.6 KB) (673.2 KB)


I took Raja’s example, but went a different way.

I too have constantly wondered how this sort of thing is achieved. Not easily is the simple answer. I thought of a middle ground recently however, involving the SubD tools as an in between to get 4 sided topology. i made a hack at a script using my VERY limited Python knowledge.

I called it FlowAlongBrep, but under the hood it converts every SubDFace into an untrimmed surface patch, which works conveniently for panelling with FlowAlongSurface. (3.5 KB)
FlowAlongBrep_QuadRemesh.3dm (10.3 MB)



  • Deal with Z Scale, ideally the flowing would just stretch the object 2D, and not multiply up the height.
  • Anything with speed - it’s pretty sluggish as expected.
  • See how UV direction is working - right now, it’s just assumed you do something that has perfect rotational symmetry.

I’d love for anyone more professional to suggest ways it can be tweaked/sped up and so on. Because personally I think it’s cool. If you need that naked edge to match up to some design intent too, you could still do that too. Or if you have a top edge surface, you could match it to the naked edge with MatchSrf. I quickly made a Sweep2 to match up.

If you just need something for 3D printing though, I would just use an Unwrap / box map and displacement.


This video at around 1:04:10 he mentions projecting shapes onto a target polysurface. He doesn’t go into any more details on how he did it but I’d be interested in any other resources on working with ploysurfaces that anyone knows of.

1 Like

@ftzuk I suppose one can turn on control points of a surface, and project or pull those to another surface.

hello friend How to use the plugin please

Hi, try downloading the .py script

Use the command runpythonscript. Let me know how it works for you, or feel free to show me the projet and I can take a look for you.

1 Like

example part 1

example 1.3dm (4.9 MB)

example part 2

example 2.3dm (4.89 MB)