Need Help Perforating a Facade

Hi, I’m trying to perforate a curved surface in Grasshopper, and I’m running into a loft/data-structure problem.

I have a curved facade surface that I’m sampling with Evaluate Surface to generate points and normals. I’m using those normals to create circles / cutter geometry normal to the surface. That part is mostly working now.

The issue is happening in the lofting / curve-connection stage. Instead of generating clean strips, the loft is creating long diagonal connections across the surface, as if the input curves are being connected in the wrong order or across the wrong branches. It looks like a data tree / list matching / curve direction problem rather than a geometry-size issue.

I have already tried:

  • adjusting U/V counts

  • changing extrusion/amplitude values

  • reversing vectors for the cutter direction

  • replacing a Surface parameter with a Brep parameter where needed

At this point, the main problem seems to be that the curves feeding Loft are either mixed, unsorted, or running in inconsistent directions, which is causing the loft to zig-zag across the panel.

What I’m trying to get is:

  • a clean set of perforation/cutter strips normal to the curved surface

  • no diagonal loft connections

  • clean perforation logic that I can later use for my façade panels

Does this sound like I should be using Graft / Flip Curve / Sort Along Curve before Loft, or is there a cleaner way to structure this definition? It should look like a facade panel with thickness and holes in it. I just can’t get the top part of it to work.

sounds about right. may be helpful to others if you screenshot the section curves too.

I tried using all three and still nothing works. This is the surface I’m working with.

hmm… if that’s your surface, what is loft doing for you? can you just eval on that surface?

I was trying to loft the edges so their would be 4 surfaces, or give a thickness to make it a true panel. I don’t know too much about grasshopper, been learning as I go, and just got to this point of not sure how to fix it. Right now, it make a surface with holes in it, but I was hoping to give a thickness and that’s what the loft was supposed to do.

So this is the end result but how I really want it, is this way…

So what I had to do was explode and just take the surface I need and then offset surface. I just wanted to cut out that step. I hope that makes sense.

i see. your workflow does the right thing in concept. you’re probably right about the tree structure. when offset, the original edge topology may have shifted somehow. sorting may be a pain. the quickest way i can think of is to tap into RhinoCommon SDK via a script component.

offset2solid.gh (2.7 KB)

Is there a reason why you haven’t uploaded a file for us to look at?

Didn’t think I need too since it’s a script and just a flat curvy surface.

I’ve never used this before, is it pretty use to use? Thank you by the way.

You can solve this another way, and natively with Grasshopper components. Do not try to trim two surfaces and loft them together. Trim just one. Offset the trimmed surface. Find the naked edges. Loft those. Brep Join. Much faster and efficient than boolean operations.


Need Help Perforating a Facade VR 1.gh (11.3 KB)


Abbreviated with Pufferfish’s Offset Surface:

Thank you! I will give them both a shot and see what happens.

so quick question, why a plane? Why not a surface? I’m confused on the plan surface and how that would work… I tried it but since I don’t know that much about it, it’s hard to figure it out on my own.

This is exactly why I asked where your GH file is. I used a Plane Surface as a generic stand-in for any surface. I would have otherwise shown how to do it with your geometry specifically.