I have a box with rounded corners, open on top and bottom. I want to create a perforation pattern that wraps all the way around the box with equally spaced features. The first step is to create a point grid, but the surface UV curves are sized differently for each surface within the brep. How can I create one pattern with equal spacing around all the connected surfaces?
My instinct is to divide one edge into equal parts (the way a normal Divide Surface command would), find the length of the segments and use that number to drive the segment length across other surfaces, but that doesn’t seem to work. Any insight would be appreciated.
Get the Surfaces sizes in U or V. Get the min or max (or average). Then for each Surface sizeU/V (and for given divisions uDiv, vDiv) get a proportional division value as follows (min is used):
int divInU = (int) Math.Round (uDiv * sizeU/minU, 0);
int divInV = (int) Math.Round (vDiv * sizeV/minV, 0);
The tricky part is to do your Surfaces (or BrepFaces) having the same orientation in U/V in order to allow this approach to work.
See an example on a List of BrepFaces (for U/V 26/23) and spot the values in the blue/red panels according the proportional option (no means use divisions as provided) used:
This is a very clean approach. It works great for simple extrusions. Unfortunately, the application that I’m working up to has a more uneven surface (I reduced it to simplest terms in my original question to help me understand the approach). When the surface is broken or uneven, the contour approach doesn’t keep the columns of points aligned so it doesn’t form a perfect grid.
Thanks, I appreciate all the input on this project!
At some point the definition needs to be freed up from any UV relationship, especially if there are trims on the surface or a polysurfaces where UV is not predictable. In this case you have both.
In that case I use PanelingTools and create a series of sections around the object intersecting planes or whatever gives the spacing you want. You may even want to filter what is interior and what is on boundary. Because many times the logic is different at the boundary.
Many times intersecting the untrimmed version of will give a regular count and spacing, then come back and use only the points that are inside the trim. PanelingTools can help with that too.
UV is very limiting and has very little to do with 3d space or spacing. All to often we try to idealize UV to make sections and spacing to match, but that is very fragile. That is why PanelingTools has more tools beyond UV.
The actual target geometry in my application is a little more complex. Instead of being a straight extrusion, the box has an irregular cut in it. A loft (in Rhino or in Grasshopper) isn’t ideal because the unequal curves produce irregular UV curves that don’t follow a grid.
If I remodel the surface ahead of time in Rhino by extruding the box and trimming against a curve, the Divide Surface works exactly as I want, even without the Pufferfish Unsplit Loft.
Remodeling ahead of time is a perfectly fine solution for this application, but I’m just curious how this process would work in Grasshopper. I can extrude or loft a surface but I can’t seem to trim the surface using a curve. What am I missing with this step?
You can find inner panels that are full quads and can be populated with the standard facade frame.
Now the key is to decide what to do when the grid intersects the trimmed edge. These are special case grids that Grasshopper and single out an do something different.
Drive adaptive components directly using Rhino.Inside.Revit. Grasshopper can get smart at placing different adaptive components for different situations such as panels with 3, 4 and 5 points for each panel.
Create the frames and spanning elements in Rhino and then insert Families or each panel type.