Parametric dome

No we didn’t take it that far. We did calculate the self-weight of the thing for fun but didn’t do anything fancier than that. I was pretty much on my own and everyone had already been so kind with their time I couldn’t press more.

I have problems with importing to revit dome from @Vikram_Subbaiah GeodesicSphere3.dyn. I try different methods of import, but get the same result. I need solid mass, when i try export surfaces - i get surfaces in revit, but when converting to solid - get this :frowning: What am i doing wrong?!

import2
with other divide method i writen on python - same problems

mass from equal arcs divide:


red dots on icosahedron vertices. Triangles divided by same code imported with different distortion.

If i import each surface as form, i get this:


looks better, but i cant make solid mass from them :frowning:

You could create a solid mass in Dynamo (Solid.ByJoinedSurfaces) before importing it into Revit
Geodesic.dyn (7.1 KB)

1 Like

Hi Vikram! Results on my screenshots are after creating solid in dynamo. I tried import this solid by Springs.Form.ByGeometry, ImportInstance.ByGeometry, DirectShape and have similar results. Maybe problem is in my setup? You have no problems during import solid geodesic sphere in revit?

Hadn’t tried to import in to Revit earlier
When I tried to import the solid that was created from surfaces, I obtained results similar to yours.

However, it worked on extracting a solid from a Polysurface (obtained by joining the individual surfaces)
GeodesicSolid.rfa (548 KB)


GeodesicSolid2

2 Likes

Vikram, thanks alot! This way works great!
In my solution with equal arcs divide too :slight_smile:

Alright, I extended this to support adaptive paneling… with the correct coordination system for each adaptive point.

Script in extra folder of Synthesize toolkit package… Called :
Conceptual.Adaptive K-Super Geodesic Paneling

Just draw a circle in Revit and create form, select any part of the created sphere from the script, and there are choices to choose whether you want upper half, downer half, or full sphere, you’d need to click on “Proceed” to perform the paneling, without it, the script will give you a quick preview before performing the heavy duty paneling.




Enjoy and thanks @Vikram_Subbaiah for providing initial math for this

7 Likes

hello Dimitar, I copied your steps, but my PoliCurve.ByPoints is not working and I can’t find GetKeys either …

Vibram, I can’t access your .dyn files.
I only see codes in GeodesicSphere3.dyn and Geodesic.dyn, I don’t see/find geodesic

Updated for 2.13.xx


geodesicSphere_20210929.dyn (19.5 KB)

// Radius
rad = 12;

// Division Depth
d = 9;

// Icosahedron
p = (1+Math.Sqrt(5))/2;
a = Point.ByCoordinates([0,0,0,0,p,-p,-p,p,1,-1,-1,1],[1,-1,-1,1,0,0,0,0,p,p,-p,-p],[p,p,-p,-p,1,1,-1,-1,0,0,0,0]);
b = [[a[0],a[8],a[9]],[a[0],a[9],a[5]],[a[0],a[5],a[1]],[a[0],a[1],a[4]],[a[0],a[4],a[8]],
[a[1],a[5],a[10]],[a[1],a[10],a[11]],[a[1],a[11],a[4]],[a[2],a[3],a[7]],[a[2],a[7],a[11]],
[a[2],a[11],a[10]],[a[2],a[10],a[6]],[a[2],a[6],a[3]],[a[3],a[6],a[9]],[a[3],a[9],a[8]],
[a[3],a[8],a[7]],[a[4],a[11],a[7]],[a[4],a[7],a[8]],[a[5],a[9],a[6]],[a[5],a[6],a[10]]];
tri = Surface.ByPerimeterPoints(b);

// Sub dividing equilateral faces
// Edges of equilateral surface
crv1 = tri.PerimeterCurves();
len1 = List.GetItemAtIndex(crv1<1>,0).Length;
n = d<1?1:d;
len2 = len1/n;

// Vertices of equilateral surface
pnt1 = List.GetItemAtIndex(crv1<1>,0).StartPoint;
pnt2 = List.GetItemAtIndex(crv1<1>,1).StartPoint;
pnt3 = List.GetItemAtIndex(crv1<1>,2).StartPoint;

dir1 = Vector.ByTwoPoints(pnt1,pnt2);
dir2 = Vector.ByTwoPoints(pnt1,pnt3);
dir3 = Vector.ByTwoPoints(pnt2,pnt3);

// Sub triangle 1
pnt4 = pnt1.Translate(dir1,len2);
pnt5 = pnt1.Translate(dir2,len2);
sub1 = Polygon.ByPoints(Transpose([pnt1,pnt4,pnt5]));

// Repeating sub triangle
n2 = (0..(n-1))*len2<1>;
sub2 = sub1.Translate(dir1,n2);
n3 = List.TakeItems(n2<1>,1..n);
sub3 = sub2.Translate(dir3,n3);

// Sub triangle 2
pnt6 = n<2?pnt1:pnt4.Translate(dir2,len2);
sub4 = Polygon.ByPoints(Transpose([pnt4,pnt5,pnt6]));
n4 = (0..(n-2))*len2<1>;
sub5 = sub4.Translate(dir1,n4);
n5 = List.TakeItems(n4<1>,1..n);
sub6 = sub5.Translate(dir3,n5);

sub21 = List.Flatten(List.TakeItems([sub3,sub6],n),-1);

plPnt1 = List.Flatten(sub21).Points;
plDir1 = Vector.ByTwoPoints(Point.Origin(),plPnt1);

sph = Sphere.ByCenterPointRadius(Point.Origin(),rad);
plPnt21 = List.Flatten(sph.ProjectInputOnto(plPnt1,plDir1)<1>,-1);
pl1 = Polygon.ByPoints(plPnt21);
sr1 = pl1.Patch();

sr2 = GeometryColor.ByGeometryColor(List.Transpose(List.Chop(sr1,4)),
Color.ByARGB(255,[115,105,25,200],[200,100,56,169],26));
6 Likes

Hi Vikram,

I know this is an old post, but it seems like the link in your post no longer works :frowning: Any chance you can republish that dome script you did back then? I’d love to see how you did it.

Thanks!

Sorry, I neither recollect nor have saved what was done then :frowning_face:
I will update, if I manage to find or figure out what was attempted.

2 Likes

I would like to give my contribution too.

Look at to explanation on my blog post link
https://www.onbim.net/single-post/domo-geodésico

1 Like