Faceted Dome from Points in Data Trees - There Must be a Better Way?

Hello all,

I am starting to get my legs underneath me regarding data trees. However…

Surely there must be a less convoluted way to achieve this without having to get all my wires crossed (mentally). Possibly a python approach is best used here? I first attempted to create a delaunay mesh, but then I realized that the desired triangulation of the mesh is not exactly “regular” as the triangles orientation ‘flip’ along the branch.

Besides being annoyingly complex, my current approach falls short of the desired approach in 2 ways;

  1. Tree branches and object indices need to be ‘manually’ mapped and extracted to form the triangles. The 'Flipping" of triangles causes more complexity here as well.
  2. In order to complete the entire octogon, I need to ‘remap’ the data trees and move the last branch as branch {0}. This means I need to now duplicate the script.

I would like to maintain the high level data tree structure as much as possible. The end goal is to recreate the faceted domed ceiling of the Islamic Art Museum in Qatar by I.M. Pei.

Anyone have suggestions on how I can simplify this?

Octogon_Ceiling_Islamic Art Museum Qatar_v2 Cleaned.gh (37.3 KB)

My definition uses Weaverbird Constant Quads Split Subdivision and Midedge Subdivision to split the quad faces and then sorts the faces according to the points of the first division quad faces.

In a second step, the meshes are deconstructed, vertices are projected vertically upwards to a sphere and the meshes are reconstructed and dispatched again.

polygon_sorted_subdivision.gh (31.2 KB)

PS: Octogon vs. Octagon — Which is Correct Spelling? (askdifference.com)

3 Likes

Martin, this solution is very helpful and much cleaner by relying on Weaverbird for the meshing. Thank you for sharing.

For the sake of learning and becoming well versed in data tree manipulation; I am wondering if there is a way to do this algorithmically, without plugins, by manipulating the data trees in a simpler way. Possibly by weaving, pattern mapping the points in a tree, and then partitioning and exploding the tree to form the triangles?

Octagon*

Yes this is possible. Look into the Relative Item component.

I did the splitting and sorting on one strip which is oriented on the y axis:

For the sorting, I chose to sort based on rounded y-coorddinates. The first result should always be groups of 2 points / surfaces.

The second sorting is done with the x-coordinates.

In the end, I flipped the tree and divided the lists into partitions with 4 items each.

relative-item_split_sort.gh (23.1 KB)

3 Likes

Martin, this is very helpful yet again.

I attempted to adopt this approach for the entire octagon, however I ran into some difficulties. So in the end, I decided to divide a single strip (and the flipped strip), then polar array them according to the number of sides of the original geometry.

I’m still working on getting everything fully organized, projected to an ‘oblate spheroid’, and every-other facet point offset just like the dome as pictured.


Octogon_Ceiling_Islamic Art Museum Qatar_v4.1 Cleaned.gh (60.6 KB)

1 Like

Actually, you could also do it like this:

The quad faces are filtered and Weaverbird Stellate is used to create a pyramid on each quad.

The four sub-faces are sorted around local planes:

octagon_stellate.gh (28.6 KB)

1 Like

Martin, I appreciate the continued iteration! This approach looks promising. It seems that Weaverbird can do lots of the heavy lifting when it comes to meshing of points.

I should have clarified in my original post that I am attempting to do this without use of plug-ins, although not as efficient and elegant, but mostly as a learning exercise.

Weaverbird is one of three plug-ins I have installed :slight_smile:

1 Like

Check this one out! I took a different and much simplier approach. Now I am having issues with how the PolarArray component structures the data.

Then figure how to properly map/project to a dome or sphere.


IslamicArtMuseum_Dome.gh (21.3 KB)

Are you using Rhino 7? The area components in your definition take long time to compute…

See, the benefit of doing this with meshes is that once you have the base mesh in 2D, you can easily deconstruct the mesh, translate the vertices and recreate the mesh.

Rhino 6… ancient tech.

I am essentally just using DeconstructBrep the same way I would use DeconstructMesh Face. I’m just really trying to avoid using Weaverbird to mesh.

I think I’ve almost got the solution to translate the verticies before the PolarArray

That is simple. Instead of Weaverbird Stellate, you can shift the list with 4 face vertices and construct 4 new faces with a translated centerpoint.

2 Likes

Martin,

I am finally getting into your script and realize it is also using Kangaroo2 Combine&Clean. Is there a native grasshopper solution for this?

You can try Align vertices and maybe add a weld component. Maybe the other way around.

But, Kangaroo is an official part of Grasshopper…

1 Like