I've been trying to build a buckyball in Dynamo recently. I ended up following Zach's advice and using data from internet and excel: Drawing a buckyball in Excel. This resulted in a two sheet excel file, with one set of XYZ coordinates (60) and another set of connections between nodes (90).
The Dynamo definition is built up like this:
This simple exercise has led to a couple of questions:
First, is this how you would do it? Can you think of a better way of creating the points directly in Dynamo without the use of external data?
Second, I find it a bit hard to control the placement, rotation and justification of the Framing. The "Up" input in the Structural Framing node sees to control nothing. I'd like to be able to change the cross section rotation so that all members orient their main moment capacity toward the center of the ball. I'd also like to be able to use the center of the framing as the placement line instead of top. I realize I could control this better with Adaptive Components, but then I loose the analytical lines.
Last, I find it hard to work out how to deal with scaling. Any ideas on how I could implement that in this definition?
All ideas are very welcome:)
I've been itching to work on some archimedian solids in Dynamo for some time but hadn't gotten around to it. So your post has given me a good excuse to look into it.
To answer your questions:
1) Creating the coordinates inside Dynamo is fairly simple. You just create XYZs for the cartesian coordinates (see attached custom node) you can find on the Wikipedia (http://en.wikipedia.org/wiki/Truncated_icosahedron):
(0, ±1, ±3φ)
(±2, ±(1+2φ), ±φ)
(±1, ±(2+φ), ±2φ)
However, your Excel sheet has one significant advantage: It already knows the pairs of points that make up the struts. This is something that would have to be computed in a pure Dynamo custom node first - but it shouldn't be too hard since all adjacent vertices have a distance of 2 to each other (provided you haven't scaled your XYZs, see below for that)..
2.) To calculate Up you could get the average XYZ of the two endpoint of a strut and then find the correct vector by using the Direction to XYZ node with the sphere's center as the starting point.
3.) Scaling should be a piece of cake with the Scale XYZ node. Just apply it to your list of XYZs.
great start Havard. you up node seems broken, although I'm pretty sure it worked on a previous release.
XYZ scale is a must have for sure.
So I continued to work on this last night but didn't have the time to write another post.
BTW: The Buckyball Coordinates node from my last post uses a very handy node called Phi made by Sean Burke.
It turns out that computing the struts based on the coordinates can be achieved with a recursive node:What this node does is it takes the first coordinate and measures the distance to all other coordinates. It then filters out all coordinates that do not have a distance of 2 (e.g. directly adjacent coordinates). From the remaining coordinates, a list of struts is accumulated. Then the node keeps calling itself recursively with the rest of the previously input list until that list has been fully processed. This will give you a list of struts that does not contain any duplicates, so this way you could get rid of your Excel sheet and have all the data generated natively in Dynamo - good for people like me that don't have MS Office installed on their machines... ;-)
You can then wrap it up in another custom node that does the scaling and some other useful things for you:
With the Add XYZ node, it's easy to give your buckyball an origin. The struts are returned as both lines and pairs of XYZs (in case we want to use adaptive components instead of structural framing). Now that we have nodes that actually produce numerical output with units we can also compute the area and volume of the buckyball and have them displayed properly.
Now the next step could be creating lists of XYZs for the hexagons and pentagons (for subsequent use with adaptive components). I imagine that would require a similar approach as computing the struts.
In any case, I've just uploaded the current state of my work to the package manager, so check it out if you want. I wonder if we couldn't create most (if not all) archimedian solids in a similar fashion as ready-to-use packages.
One last thing: As Julien said, it looks like the Up input of the Structural Framing node is broken in recent builds. I filed a bug report here. Let's hope this gets resolved quickly.
That's just plain awesome Andreas. You and Julien were right - the XYZ Scale was too easy to build in.
I think I need to spend some time to understand the math and the recursiveness in your custom nodes, but I'm very impressed by the way this works.
This is perhaps most for Ian and the guys, but I run into trouble when applying a solid two-point adaptive components to the struts. If the family I use only has two adaptive points and a model line - no problemo, but if it has solid geometry some of the struts will fail. In my Excel definition only one fails - the strut between node 56 and 58:
In Andreas' definition six fail, and it's all the horizontal ones. No issues with the spheres.
Anyway, the definitions work in Dynamo and I'd LOVE to see some more archimedian solid definitions coming. I'll sure as hell try to make some as soon as I grasp the math ;-)
I have a python script for geodesics this that works in Dynamo, it supports inputting a radius and recursion depth. I'll dig it up soon