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.
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.
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.
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.
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.