Branched Loft

Howdy,

I am not sure how to call what I am trying to accomplish. The best verbal description I could come up with is “Branched Loft”. I tried to search the forums for something similar, but nothing came up…

I would like to create a lofted geometry that forks branches of a main trunk, like a tree.

I am attaching a picture from a column made by Xtreee, as it might help give an idea of the outcome I am trying to achieve.

Does anyone have any idea how to accomplish this, please?

Thank you in advance,

Andre Philippi





Lofted_Circles_DEV-0.0.1.gh (33.3 KB)

Here’s how I’d do this - but this method will not provide the thickened ends being offset from the centerlines of the columns:

  1. Make a vertical series of circles of desired diameters
  2. Loft all these to make a single column
  3. Cap the column
  4. Make a circular array using the column
  5. Use the GH Twist component to give the array the desired twist. Note that doing this will make the middle of the array narrower than the top & bottom.
  6. Mirror #5 to get an opposite twist. (Mirror is lots faster than another twist in the opposite direction.
  7. Join/merge #5 & #6.

If the geometry is what u want to achieve then checkout https://www.food4rhino.com/app/dendro

Hi @Andre_Philippi,

Here’s a recipe using hexagonal cells, mapped to a base surface:

2_preview

The thickness of the mesh network can be controlled by an attractor point. You can introduce even more attractors, if desired.

Lofted_Circles_DEV-0.0.2.gh (24.6 KB)

You are going to need Kangaroo2 (included in Rhino 6), LunchBox, as well as @DanielPiker’s Skeleton Fattener component for this to work properly.

3 Likes

Thank you P1r4t3b0y. That probably would work.

However at this point, I am actually trying to understand the limitations of GH and the reasons why I can or cannot do what I intended; using loft, solid unions, solid differences, mesh unions, mesh differences.

If anyone with deeper knowledge would like to contribute, I would be more than happy to listen :slight_smile:

On the pics below, a more clear example of what I am trying to achieve. So far I have tried the following methods, without success:

  1. Loft everything. I tried different list/tree arrangements but no luck. Maybe loft cannot handle the split?

  2. Loft each “branch” individually with the trunk, resulting in 4 separate trimmed surfaces. That works, so I thought about going that route…attempting:

2.1) Tried to split the above surfaces and join the parts. Didn’t work.

2.2) Created individual tubes (closed breps), by offsetting the surfaces, generating an inner surface, then capping them. It worked.

2.2.1) Then tried to do brep solid transformations (union, intersect, difference, split) on these individual pieces. Nothing worked.

2.2.2) Tried to convert the solid breps from #2.2 above to meshes, so I could perform union, intersect, difference, split. Nothing worked either.

2.3) Tried to cap each tube surface generating closed breps (rods this time, not tubes). Did offset each tube surface as well, generating a smaller version (to use for operation below), and then capped. All good here.

2.3.1) Tried union, intersect, difference on these closed breps. Nothing worked.

2.3.2) Similar to #2.2.2, tried to convert everything to meshes, so I could do mesh union, intersect, difference, split. But once again, nothing work.

So I am wondering why these boolean operations are not working on this geometry.

Would anyone know what am I doing wrong, please?

Thank you so much in advance,

Best,

Andre


Lofted_Circles_DEV-0.0.3.gh (51.3 KB)

Grasshopper has mainly performance limitations. Every other apparent limitation is most often simply due to the users lack of knowledge about mathematics, geometry, physics, programming, and project specific strategies.

The Loft component is meant to create lofted surfaces between one or more consecutive curves. The surface is created between two adjacent curves at a time, thus trying to split loft one curve to four curves doesn’t work, since this is not what Loft is supposed to do, no matter your data structure.

The boolean operations don’t work, because all geometries share a common base, the lower circle (or circular surface). This is often a problem with boolean operations, and I guess it has to do with model tolerances that produce weird intersection events?
The gist of it all is that you probably won’t be able to achieve your goal exactly like this.

I’d recommend you to try a node-based system/logic, which should work better.

If you inspect my above example more closely, you’ll see that I use the Fatten component to turn a line graph like this into a mesh.
In order to get a brep/polysurface, you could probably also proceed with the node-based approach. The individual surfaces could be produces by lofting the individual node connections and filling gaps with spheres? This thread could maybe be helpful.

Be warned though, getting the above, hexagonal structure onto a tree-like geometry, like you’re currently looking to construct, is going to be quite the challenge. Imagine how you would map the hex grid to this?

1 Like

Thank you so much for your input P1r4t3b0y!

Best,

Andre

1 Like