Grasshopper

algorithmic modeling for Rhino

# Help Please: Irregular Space Frame

Hey GH community. I am really hoping someone will be kind enough to help me. I am trying to make a horizontal space frame within the polyline in the file below.

It is straight lined however is no entirely rectangular, more of an "L" shape with voids.

I have been pretty much spent the day googling the different methods of doing this in GH.

And they all seem to be about making a purely rectangular frame. But I cant help but think their must be a way to make it conform to a boundary. Sorry I am very new to grasshopper and any help will be much appreciated before I go a head and do this manually.

I look forward to the day when I am good enough to help others until then.

Thank you very much.

GB

Views: 2374

Attachments:

### Replies to This Discussion

So this polyline (these polylines to be exact) is supposed to be the base curve for the space-frame? How is the space-frame supposed to look?

--

David Rutten

david@mcneel.com

Tirol, Austria

David, Thanks for the quick reply.

Yes that is meant to be the base curve, and sorry yes polylines.

Essentially it is suppose to be a simple space frame, with each modules dimension being a 2m x 2m x 2m grid, that wraps around that solid mass.

something like this is what I am aiming for in that shape.

The main issue I am facing is angles and voids.

What does "Wrap around" mean? Does the space-frame bend and twist and stretch to accommodate the angles and variable distances of the base curve? Should the space frame overlap the base curves or be strictly on the inside?

--

David Rutten

david@mcneel.com

Tirol, Austria

Hopefully the image clears things up. The orange would be solid, and the grey is the space frame.

Thanks again.

Something like this?

--

David Rutten

david@mcneel.com

Tirol, Austria

Attachments:

And this one also creates lines at the bottom.

--

David Rutten

david@mcneel.com

Tirol, Austria

Attachments:

Amazing, thank you. The second one is pretty much it.

If you wouldn't mind explaining how you go to this resolution, as I try to mimic this I get several errors. Thank you again

I did post the file, but the basic logic is thus:

1. Create a grid that comfortably extends beyond all edges of the surface.
2. For each cell in this grid, determine whether it is worth keeping. There are several ways to define 'worth keeping' of course, in my file I tested whether the grid cell centre point was on the surface. I tested this by projecting this center point onto the surface and seeing whether the projection distance was very small or not. If it's very small, the point was on the surface to begin with.
3. Other possible metrics would be to see if all four corner points are on the surface, or if at least one corner point is on the surface, or.....
4. Once you know which cells are worth keeping, cull both the cell data and the centre point data. This may give you some empty lists, which is why I cleaned both data streams as well, that is not perhaps necessary, it depends on how the remainder of the file handles the data layout.
5. I find the 4 corners of each cell with [Curve Discontinuity]. I could also have used [Curve Control Points] but that would have given me 5 points per square as the first and last are repeated since the cell polylines are closed.
6. Then lower the centre point and connect it with the 4 corners, this gives you the downwards pointing diagonal edges.
7. The last step is a bit of hack but unfortunately it is very difficult to do it right at the moment. I used the [Proximity 3D] component to find all neighbours within 2.1 units of each lowered centre point. The distance limit means it will only find the correct neighbours, but note I hardcoded the distance limit rather than make it depend on the grid-size, which would have been more flexible.

Because the last step uses a single shot algorithm you end up with duplicate lines at the bottom lattice and also the order of lines is useless.

--

David Rutten

david@mcneel.com

Tirol, Austria