Reproducing a freeform surface


As per usual, I’m guessing that I’m overthinking this problem.
I have a freeform surface that I’ve scanned, imported, and created numerous cross sections in 2 directions. See the screenshot below. I then rebuilt the curves so as to create a uniform surface. The problem is that not all section curves in one direction cross all of the section curves in the other direction (nor do they necessarily actually intersect because of the “rebuild”) so I can’t use Network Surface. I can create a lofted surface in one direction (e.g. blue) but those aren’t “driven” by the other direction. Maybe there’s a suitable way to create an “average” surface from numerous lofts. So the question is: what’s the best way to use all of these valid cross sections to create a surface that is the closest approximation to the scanned object?

(Pascal Golay) #2

Hi Steve - the problem is the curves, the green ones anyway, are not really suitable for surfacing directly - they don’t match any logical U or V direction with this shape. Here’s a thought:

  1. Loft the blue curves and include a point at the top to finish the loft.
  2. Rebuild the resulting surface to a fairly high point count - maybe 30 by 30.
  3. Select all of the curves, blue and green and start Patch. Set the previously created rebuilt surface as the ‘starting’ surface. Pull=0…

Anything good happen?


(Rajaa Issa) #3

Can you create planes out of the blue curves? Also perhaps add more planes in between. Intersect the planes with the green curves, and them create loft.

(David Cockey) #4

That would also be my approach with a few changes.

Use the Preserve edges option in Patch to fix the edge of the output surface as the edge of the starting surface.

Rather than going immediately to 30 x 30 or similar point count try a much lower point count for the starting surface - perhaps 12 points in the circumferential direction and 10 in the vertical direction. Use the rebuilt surface in Patch and see what the results look like. Create a set if test points on the curves using Divide, then use PointDeviation to test how close the surface is to the test points. Rebuild with more points if needed, or if only a few areas need refinement use InsertKnot or InsertControlPoint to locally add points to the surface where needed. Then Patch again with the revised starting surface.

The reason not to start with a high point count starting surface is using Patch with starting surface with a high number of “points” sometimes results in wiggles, etc.

Also worth experimenting with is the value of Stiffness in Patch. I’ve found that a smaller value such as 0.1 can result in a better fit to the input curves, but sometimes increases the probability of wiggles.


I could create many more sections on one axis but the problem is that it’s still likely that I’d miss edges that are sharp in the other axis. Cross sections of a cube with small edge fillets are likely to miss the value of the radius at least in one axis because the spacing between the cross sectional planes.

(David Cockey) #6

If the surface needs to have internal kinks / sharp edges then the best approach may be to divide the overall surface into several surfaces with edges along the sharp edges.Create a set of curves along the edges and use those as boundary curves for the individual surfaces. Some of the individual surfaces may be best created using Patch as described above.