# Assembling / form-finding with different units of equilateral triangles

Hi, I’m a beginner of Grasshopper and I’m struggling with something for a school project.

I have three different units (as you can see in the figure below).

• The first unit: 5 equilateral triangles around one vertice.
• The second unit: 6 equilateral triangles around one vertice.
• The third unit: 7 equilateral triangles around one vertice, which makes kind of a hyperbolic shape.

I scripted them as well, see file. I used Delaunoy for the last two units (I don’t know if there’s another way).
Remark: The equilateral triangles of all the units have the same length.

The goal is to assemble the different units, in a way that it fits well (so there are no gaps between the units). Therefore the shape of the second and the third unit should be able to change while the equilateral triangles remain the same. [The shape of the first unit does not change.]

An example: two units of 5 equilateral triangles adding to an unit of 7 equilateral triangles --> the shape of unit of 7 eq. triangles will change in a way that it can fit well with the other two units.

Concerning “assembling” in Grasshopper, I was only able to do it with the first unit, by using Kangaroo tools such as Coincident connecting different points. [see file]

So can someone help me how I can do it with other units? I’ve been looking for a long time and I would be very very very thankful if someone could help!

The files are here:Test_assembling.3dm (117.2 KB) Test_assembling.gh (29.8 KB)

1 Like

You could use MagnetSnap here (like in this video)
Here’s an example starting from 5,6 and 7 sided pyramids
snapping_example.gh (28.0 KB)

2 Likes

Thank you so much, this is what I was looking for!
One question (again struggling): the shape of the first unit (5 equilateral triangles) should not change, so how do I avoid that? (When I connect it with other units, the triangles still rotate, which I don’t want)

You could use the RigidPointSet goal to preserve the relative positions of the vertices of each of the 5 sided units like this:
snapping_example2.gh (25.7 KB)

1 Like

Thank you so much!! Is it actually possible to integrate the holes in the triangules like this?

You can get the meshes from the first output of the ‘Bang’ component.
From this use the Mesh>Analysis>Face Boundaries component to extract the triangles, and then you can do whatever further processing you want to generate geometry based on these triangles.

1 Like

Thank you! So, I made triangular holes in the triangles. And now, I’m trying to fill these spaces between the triangles, hardly to explain it, so below an example. It kind of worked… even though it’s not the right way (because I want to do it with all the spaces between the triangles and not just one).

Another problem is that there are also triangles that overlap like this, so I’m wondering if it’s possible to ‘substract’ it (like in Rhino)?

So, I’m kind of stuck there… Could you help me how to go further or do you know a better way? I promise this is my last question!

fillspaces.gh (36.0 KB)

You could use Weaverbird’s picture frame component on the mesh instead of extracting the triangles, then Thicken

1 Like

That’s amazing. Thank you so much!!

Sorry again… But how do I add more units of 5 equilateral triangles? I tried using Manage Mesh Collection but don’t know how to go further.

The meshes are internalised, one way to make more would be to bake them into Rhino, copy paste to get number you want, then reference them back in.

I’ve often thought it would be nice to have an externalise option on internalised data to ease this process. When sharing gh files it is often nicer to internalise all the inputs so you don’t need to share a 3dm along with it, but then for editing these inputs later on it is often more convenient to do in Rhino.

This baking and re-referencing now takes 8 clicks, but it is such a common operation I think it would make sense to have an option there to do it in 1. Any chance of adding this in GH2 @DavidRutten ?

(also, on a similar note, a global internalise-all option would be very handy for making self-contained gh definitions. The number of times I’ve done this manually, thought I don’t then need to save the accompanying Rhino file, only to discover when I open the gh later that I missed one critical input…)

4 Likes

Thank you!

So I baked them into Rhino and then referenced them back in. However,
I have a new problem: the units of 5 triangles are connecting to each other… How can I avoid that? (before I added more units, there were no problems + I didn’t change the script)

Assembling units.gh (54.6 KB)

Yes, if you have any pair of rigid planar polygons sharing 3 points which don’t lie in a single line, they’re going to be co-planar.
That’s not a problem with the definition, it’s just how geometry is!

edit - ah maybe I see what you mean now, is it just that the snapping range is too high? Reducing it will mean you need to drag them closer before they snap, but can help avoid unwanted connections. It can also be helpful to connect a toggle or a slider to the strength of the snap goal, so you can reduce it to zero temporarily when you want to pull apart some points that you didn’t want joined.

Yes, I think the snapping range is too high, but it’s so strange: before I baked and added more units, it was like this (see picture below), the units don’t move, which is perfect for me!

But then, when I baked the mesh (see blue circle in the picture below) & referenced them back too, the problem of unwanted connections occurs (see the gif below). So I’m wondering why this problem occurs after I baked and referenced back?

Edit: I also noted that after baking & referencing back, there were gaps and overlapping (see figure below). This problem only occurs when I use the units (of 5 triangles) that I baked and referenced… So I tried to make a new mesh for that unit using for example WB’s Mesh from Lines, but I still got the same problem.

The snapping length needs to be less than the length of the lines, otherwise it will be trying to snap ends of each edge together, causing distortion.

I actually started over again and somehow it works now, no problems anymore. Thank you for your huge help!

Hi, I’ve been looking for a long time and still struggling, so here I’m again Weaverbird’s picture frame is a great component but is there a way that I can extract each frame? For example: after I baked some units, I can only select an unit as one component, but I would like to have the 3D triangles to be seperated.

I tried to make a script with other components, for example this script

Even though after baking I can select a triangle, I’m still stuck… because the spaces between the triangles are not filled. Any idea how I can go further or a better way?

FILE:seperated triangles.gh (43.2 KB)