How to create a smooth single surface from many polysurfaces

How Can I create a smooth single surface from polysurfaces?

Create single surface.3dm (3.1 MB)


Hi Sajesh,

I am not an expert. But normally, I would draw curves along the outer four edges of the shape, using InterpCrv. Then Edgesrf to create a single surface, using the four crvs I have drawn.

You won’t get 100% same shape, but something close.


How much experience do you have with Rhino?

The geometry appears to be triangular mesh which was converted to surfaces, possibly using the ToNURBS command.

Patch may be useful. Curves along the outer edges will also be needed to either trim the results of Patch or to create a starting surface for Patch.

Curves along the edges can be created by first joining the surface/polysurfaces into as few polysurfaces as possible. DupBorder to obtain polycurves around the borders of the polysurfaces. The result will be polylines/deree 1 curves. Explode the polylines and delete the lines which are not on the border of the object. Join the remaining curves. FitCrv to obtain degree 3 curves with fewer control points.

If you have the original mesh then use it as the source of points for Patch. If the original mesh is not available first Explode the polysurfaces into individual surfaces. Then ExtractPt the control points of the individual surfaces which for these particular surfaces are the corners. (In general control points are not just the surface corners.) If the extracted points are in point clouds Explode the point clouds. SelDup to select duplicate points and Delete the duplicates.


polysrf to (741.6 KB)

rajeev pulari


this will have to be blended or something:

so I avg’ed them:

noticing more issues:

I’m getting alot of weird duplicate curves when trying to pull to these surfaces:

So, that method would be very tedious.

It might be better to convert to mesh and use subD remesh or something. It all depends on design intent.

aprox dist from origin:

these are really weird srfs, I can’t quad mesh them and can’t pull crvs in a timely manner so taking a break:

Create single surface_emod.3dm (4.5 MB)

really weird. kinda disappointed in my abilities or lack thereof…


I’ll take a look here though. Props to however you did this :beers:

although I’m not seeing the same thing:

1 Like

I was able to find a scenario where one boundary curve was going in a direction back into itself.

I corrected it by using ‘dupedge’ rather than ‘dupboundary’, and finally had a better result:

but due to the foundation polysrf being difficult to conform to, within tight tolerance, this can be very tedious without knowing what the allowance for deviation is – relative to design intent.

basically I’d continue this process and after a few hours I might have something presentable…

unfortunately, the many triangle srfs and lack of matched edges are creating very tedious nature…

I tried many meshing techniques, but would probably have to use different software in that direction.

1 Like

My first take on this is stay away from it!! How did you end up with such complicated (disjointed) stuff?


Here’s a ‘quick’ try - maybe it’ll trigger some evolution (ideas come once you leave the PC) because it’s not perfect, but it’s a single surface, it’s untrimmed, and you never specified whether it had to follow the other one perfectly - but ot definitely tries to! :stuck_out_tongue: (772.5 KB)

Let me know what you think.

Try not to mess with it much haha - the MeshMap slider shouldn’t really be changed for ‘tolerance’ purposes - I had other ideas with contour/intersections/delunay mesh but didn’t really take it to town yet - another one could involve a concave hull somehow, some tween curves or more edge surface or network surface - ok time for bed!



I guess I wasn’t kidding!

Brand new day, brand new better try, definitely follows your initial shape with more fidelity:

Still using MeshMap to avoid slowness, good hack. (756.0 KB)

Now back to work - I’ll try not to have more ideas.



This method is pretty much a good way to go - then when the Edge Surface results with obvious different shape as you warned, my guess was to ‘project’ it back to the original shape, which doesn’t work because the shape is naughty, hence I thought MeshMap could work - crossed fingers and it did. Cheers.

1 Like

Indeed, very interesting but has a bit of deviation:

This one is really close though :exploding_head::

1 Like

Haha yeah, agree - the first one is brute force, second one is less brute force :rofl: ? Still seems like a better choice to go back to before this shape was produced to convert it with less discrepancy (if it was a conversion as suspected/explained by @davidcockey)

1 Like

I found that there were many ‘sliverlike’ srfs in some areas causing lots of trouble.

I was finally able to break through the wall I was hitting:

I’ll try showing more info later, but need to take a break. bbl.
Create single surface_emod.3dm (5.9 MB)

1 Like

beautiful i love it

1 Like


I would like to add something here. You do have 4 edges here which means that you can represent the shape with one single un-trimmed surface.

But (!), this is not what you should always do. Whenever you see two adjacent edges form a sharp angle, you put the surface under very high tension, which leads to very unstable surfaces. This is also true for basically any surface which does not look rectangularish, or fan-shaped.

When you extent such surface, your chances are almost 100 % to produce garbage. Such a surface will produce always problems if you want to work further with it. It depends of the use-case.

What I would do here (and sorry for not deep-diving into this problem), I would create a fan shaped surface around it, fitting it and then simply trim. To fit it to the mesh, I would quickly do it manually, or build a custom annealer in code if required. Where basically you are fitting a simple surface (low cp count) onto the shape and then move cps in normal direction until you deviate not so much anymore. In Rhino this would be a manual process, but by code this is not a trivial thing to do.

And one more thing, you should never perfectly fit a surface. The mesh, e.g. if comes from a scan, could contain errors. And your aim should be to yield clean surfaces.


Excellent advice

Untrimmed surface created ion Rhino using InteprCrv, EdgeSrf, InsertKnot and Patch with starting surface:
Create single surface DC01.3dm (2.3 MB)

The choices regarding the accurace of the edge curves and knots inserted into the starting surface were arbitrary. Someone with knowledge of the overall project would probably make different choices.


Any reason not to use Patch with the starting surface option?

1 Like

I disagree.

This is mostly why I disagree. And indeed, the design intent drives everything, whatever that may be.

Of course if NURBS weren’t so restricted to rectangles or other shapes with said “tension”, then the whole ‘trimmed’ vs ‘untrimmed’ debate probably wouldn’t exist.

Great, now the surface isn’t under “tension”, but the trimmed edge is now ambiguously derived from the innards of the “slack” version.

If the design intent is ok with this, then it’s indeed great.

1 Like

I guess main issue is @sajesh_pj 's title/request + never returning nor specifying more things? haha

The ask was “a smooth single surface from many polysurfaces” :grimacing:

Fun stuff.


1 Like

I’ll try working on networking these ‘seed’ srfs soon.

I disagree. That’s why the scans should be done properly. While reverse engineering, even bad scans, is still important for establishing a principally accurate starting point.

Yes, agreed. But the design intent should be the gauge used for these decisions.

At least the foundation (starting point) should always conform to the original data as much as possible, no matter how bad the data is.

From that point, you can do whatever the design intent entails. I suppose if the design intent means, ignore 25% of the scan data, then that’s another story.

If Rhino/GH had some sort of RE/GUI ‘eto framework’ that had options for choosing a sort of ‘conformation’ tolerance for calculating the ‘fitment’ to said data, then perhaps the user could choose something like 3%-25% tolerance conformation to said scanned data, etc.

And yes, obviously if the given ‘scanned data’ was so sloppy that it had gaps approx 0.025mm-0.13mm in some places then perhaps this condones the use of a relatively medium to large tolerance.

And yes, if the scanned data is ‘degree 1’ and hence faceted everywhere, then surely the conversion into NURBS degree 3 or so, shall condone some sort of smoothing tolerance as well…

But my RE technique is to take things one step at a time, especially when the design intent isn’t well defined; you never know what might be overlooked within any particular stage of the entire sequence of events throughout the workflow from scan-to-production and out in the field during use by the customer, etc.