Surface.bypatch returns null

I am trying to create a patched surface from a collection of curves, defined by offset room boundaries. The surface.bypatch node returns a list of nulls (image 1).

Also, this surface is supposed to be triangulated using the Delaunay.ByParametersOnSurface node; this returns an empty list, even on a simple surface (image 2)…

Can anyone help, please?

What is the error message when it returns the list of nulls?

The issue is that you’re using @1 with PolyCurve.ByJoinedCurves. This is just taking each curve and making it a polycurve, which is an open curve and can’t be patched. I assume you want to take all of your curves and join them into a single polycurve. But then why do that when you already have a single surface from PolySurface.ByJoinedSurfaces? You’re taking apart geometry and putting it back together. Can you give a little more description on what you’re trying to do?

1 Like

Thanks Nick and Ricardo,

The error message is, “Warning: Surface.byPatch operation failed. Unable to patch a single, no-closed curve”.

If I set the PolyCurve.ByJoinedCurves to anything other than @L1, I get nulls for that node, as below.


The intention is to create a single, complete surface from the room boundary lines, offset from the level. The string:

  • creates a polycurve from room boundary lines
  • creates Surfaces from each of those polycurves
  • creates an offset from those surfaces
  • merges those surfaces to a polysurface
  • perimeter curves are selected, so as to ignore internal room bounding components (columns etc) when creating the final surface
  • curves are joined in a polycurve
  • surface.by patch created from polycurve [error]
  • Delaunay triangulation performed on final surface [error]

For information, the Delaunay returns an empty list, even if the final surface step is skipped:

Again, your help id much appreciated

These steps aren’t doing anything. The perimeter curves include any internal boundaries as well. You’re taking your combined polysurface, getting all of its bounding curves, then patching them back to the exact same surface. You’ll have to add some additional logic if you only want the external bounding curves.

Thanks Nick,

I have that in a larger version of the script, where a boolean mask filter the smaller lines not included in the main perimeter - that seems to work fine. I am, however, getting the same error when attempting to reconstruct the surface. And nothing when attempting the Delaunay. Any thoughts?

Thanks Nick and Ricardo,

The error message is, “Warning: Surface.byPatch operation failed. Unable to patch a single, no-closed curve”.

If I set the PolyCurve.ByJoinedCurves to anything other than @L1, I get nulls for that node, as below.

image.png1699x923 137 KB

image.png1710x922 140 KB

The intention is to create a single, complete surface from the room boundary lines, offset from the level. The string:

creates a polycurve from room boundary lines
creates Surfaces from each of those polycurves
creates an offset from those surfaces
merges those surfaces to a polysurface
perimeter curves are selected, so as to ignore internal room bounding components (columns etc) when creating the final surface
curves are joined in a polycurve
surface.by patch created from polycurve [error]
Delaunay triangulation performed on final surface [error]

For information, the Delaunay returns an empty list, even if the final surface step is skipped:

image.png1333x882 158 KB

Again, your help id much appreciated

You may have to group your curves. PolyCurve.ByJoinedCurves won’t automatically select which curves can be joined and which can’t.