""" Hexakisikosaeder 2 16.01.2021 www.3d-meier.de http://dmccooey.com/polyhedra/BiscribedDisdyakisDodecahedron.html """ import c4d import math # Variablen und Konstanten Titel = 'Hexakisikosaeder 2' # Name NP = 62 # Anzahl Punkte N3 = 120 # Anzahl Dreiecke Radius = 0.5 # Radius der Eckpunktkugeln C0 = (math.sqrt(5) - 1) / 4 C1 = (math.sqrt(15) - math.sqrt(3)) / 6 C2 = math.sqrt(10 * (5 - math.sqrt(5))) / 10 C3 = math.sqrt(3) / 3 C4 = (1 + math.sqrt(5)) / 4 C5 = math.sqrt(10 * (5 + math.sqrt(5))) / 10 C6 = (math.sqrt(3) + math.sqrt(15)) / 6 Punkte = [( 0.0, 0.0, 1.0), ( 0.0, 0.0, -1.0), ( 1.0, 0.0, 0.0), (-1.0, 0.0, 0.0), ( 0.0, 1.0, 0.0), ( 0.0, -1.0, 0.0), ( 0.0, C1, C6), ( 0.0, C1, -C6), ( 0.0, -C1, C6), ( 0.0, -C1, -C6), ( C6, 0.0, C1), ( C6, 0.0, -C1), ( -C6, 0.0, C1), ( -C6, 0.0, -C1), ( C1, C6, 0.0), ( C1, -C6, 0.0), ( -C1, C6, 0.0), ( -C1, -C6, 0.0), ( C2, 0.0, C5), ( C2, 0.0, -C5), ( -C2, 0.0, C5), ( -C2, 0.0, -C5), ( C5, C2, 0.0), ( C5, -C2, 0.0), ( -C5, C2, 0.0), ( -C5, -C2, 0.0), ( 0.0, C5, C2), ( 0.0, C5, -C2), ( 0.0, -C5, C2), ( 0.0, -C5, -C2), ( C0, 0.5, C4), ( C0, 0.5, -C4), ( C0, -0.5, C4), ( C0, -0.5, -C4), ( -C0, 0.5, C4), ( -C0, 0.5, -C4), ( -C0, -0.5, C4), ( -C0, -0.5, -C4), ( C4, C0, 0.5), ( C4, C0, -0.5), ( C4, -C0, 0.5), ( C4, -C0, -0.5), ( -C4, C0, 0.5), ( -C4, C0, -0.5), ( -C4, -C0, 0.5), ( -C4, -C0, -0.5), ( 0.5, C4, C0), ( 0.5, C4, -C0), ( 0.5, -C4, C0), ( 0.5, -C4, -C0), (-0.5, C4, C0), (-0.5, C4, -C0), (-0.5, -C4, C0), (-0.5, -C4, -C0), ( C3, C3, C3), ( C3, C3, -C3), ( C3, -C3, C3), ( C3, -C3, -C3), ( -C3, C3, C3), ( -C3, C3, -C3), ( -C3, -C3, C3), ( -C3, -C3, -C3)] Dreiecke = [( 18, 0, 8, 8 ), ( 18, 8, 32, 32 ), ( 18, 32, 56, 56 ), ( 18, 56, 40, 40 ), ( 18, 40, 10, 10 ), ( 18, 10, 38, 38 ), ( 18, 38, 54, 54 ), ( 18, 54, 30, 30 ), ( 18, 30, 6, 6 ), ( 18, 6, 0, 0 ), ( 19, 1, 7, 7 ), ( 19, 7, 31, 31 ), ( 19, 31, 55, 55 ), ( 19, 55, 39, 39 ), ( 19, 39, 11, 11 ), ( 19, 11, 41, 41 ), ( 19, 41, 57, 57 ), ( 19, 57, 33, 33 ), ( 19, 33, 9, 9 ), ( 19, 9, 1, 1 ), ( 20, 0, 6, 6 ), ( 20, 6, 34, 34 ), ( 20, 34, 58, 58 ), ( 20, 58, 42, 42 ), ( 20, 42, 12, 12 ), ( 20, 12, 44, 44 ), ( 20, 44, 60, 60 ), ( 20, 60, 36, 36 ), ( 20, 36, 8, 8 ), ( 20, 8, 0, 0 ), ( 21, 1, 9, 9 ), ( 21, 9, 37, 37 ), ( 21, 37, 61, 61 ), ( 21, 61, 45, 45 ), ( 21, 45, 13, 13 ), ( 21, 13, 43, 43 ), ( 21, 43, 59, 59 ), ( 21, 59, 35, 35 ), ( 21, 35, 7, 7 ), ( 21, 7, 1, 1 ), ( 22, 2, 11, 11 ), ( 22, 11, 39, 39 ), ( 22, 39, 55, 55 ), ( 22, 55, 47, 47 ), ( 22, 47, 14, 14 ), ( 22, 14, 46, 46 ), ( 22, 46, 54, 54 ), ( 22, 54, 38, 38 ), ( 22, 38, 10, 10 ), ( 22, 10, 2, 2 ), ( 23, 2, 10, 10 ), ( 23, 10, 40, 40 ), ( 23, 40, 56, 56 ), ( 23, 56, 48, 48 ), ( 23, 48, 15, 15 ), ( 23, 15, 49, 49 ), ( 23, 49, 57, 57 ), ( 23, 57, 41, 41 ), ( 23, 41, 11, 11 ), ( 23, 11, 2, 2 ), ( 24, 3, 12, 12 ), ( 24, 12, 42, 42 ), ( 24, 42, 58, 58 ), ( 24, 58, 50, 50 ), ( 24, 50, 16, 16 ), ( 24, 16, 51, 51 ), ( 24, 51, 59, 59 ), ( 24, 59, 43, 43 ), ( 24, 43, 13, 13 ), ( 24, 13, 3, 3 ), ( 25, 3, 13, 13 ), ( 25, 13, 45, 45 ), ( 25, 45, 61, 61 ), ( 25, 61, 53, 53 ), ( 25, 53, 17, 17 ), ( 25, 17, 52, 52 ), ( 25, 52, 60, 60 ), ( 25, 60, 44, 44 ), ( 25, 44, 12, 12 ), ( 25, 12, 3, 3 ), ( 26, 4, 16, 16 ), ( 26, 16, 50, 50 ), ( 26, 50, 58, 58 ), ( 26, 58, 34, 34 ), ( 26, 34, 6, 6 ), ( 26, 6, 30, 30 ), ( 26, 30, 54, 54 ), ( 26, 54, 46, 46 ), ( 26, 46, 14, 14 ), ( 26, 14, 4, 4 ), ( 27, 4, 14, 14 ), ( 27, 14, 47, 47 ), ( 27, 47, 55, 55 ), ( 27, 55, 31, 31 ), ( 27, 31, 7, 7 ), ( 27, 7, 35, 35 ), ( 27, 35, 59, 59 ), ( 27, 59, 51, 51 ), ( 27, 51, 16, 16 ), ( 27, 16, 4, 4 ), ( 28, 5, 15, 15 ), ( 28, 15, 48, 48 ), ( 28, 48, 56, 56 ), ( 28, 56, 32, 32 ), ( 28, 32, 8, 8 ), ( 28, 8, 36, 36 ), ( 28, 36, 60, 60 ), ( 28, 60, 52, 52 ), ( 28, 52, 17, 17 ), ( 28, 17, 5, 5 ), ( 29, 5, 17, 17 ), ( 29, 17, 53, 53 ), ( 29, 53, 61, 61 ), ( 29, 61, 37, 37 ), ( 29, 37, 9, 9 ), ( 29, 9, 33, 33 ), ( 29, 33, 57, 57 ), ( 29, 57, 49, 49 ), ( 29, 49, 15, 15 ), ( 29, 15, 5, 5 )] Faktor = 100 # Skalierungsfaktor k = 1 # Korrekturfaktor #************************************************************************ def CreateNullobjekt1(): obj = c4d.BaseObject(c4d.Onull) obj.SetName(Titel) obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateNullobjekt2(): obj = c4d.BaseObject(c4d.Onull) obj.SetName('Ecken') obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateNullobjekt3(): obj = c4d.BaseObject(c4d.Onull) obj.SetName('Kanten') obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateNullobjekt4(): obj = c4d.BaseObject(c4d.Onull) obj.SetName('Polygone') obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateDreiecke(): obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject(NP, N3) obj.SetName('Dreiecke') # Punkte uebergeben for i in xrange(NP): obj.SetPoint(i, c4d.Vector(Punkte[i][0]*Faktor*k, Punkte[i][1]*Faktor*k, Punkte[i][2]*Faktor*k)) # Dreiecke setzen for i in xrange(N3): obj.SetPolygon( i, c4d.CPolygon(Dreiecke[i][0], Dreiecke[i][1], Dreiecke[i][2], Dreiecke[i][3])) obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateSplineDreiecke(): obj = c4d.BaseObject(c4d.Ospline) obj.SetName("Spline-Dreiecke") obj.ResizeObject(N3*3) zz = 0 for i in xrange(N3): for j in xrange(3): x = Punkte[Dreiecke[i][j]][0] y = Punkte[Dreiecke[i][j]][1] z = Punkte[Dreiecke[i][j]][2] obj.SetPoint(zz, c4d.Vector(x*Faktor*k, y*Faktor*k, z*Faktor*k)) zz = zz + 1 # Segmente erzeugen obj.MakeVariableTag(c4d.Tsegment, N3) for i in range(0, N3): obj.SetSegment(i, 3, True) # Spline schliessen obj[c4d.SPLINEOBJECT_CLOSED] = True obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def main(): nullobj1 = CreateNullobjekt1() nullobj2 = CreateNullobjekt2() # Ecken nullobj3 = CreateNullobjekt3() # Kanten nullobj4 = CreateNullobjekt4() # Polygone plyobj1 = CreateDreiecke() splobj1 = CreateSplineDreiecke() doc.InsertObject(nullobj1, None, None, True) doc.InsertObject(nullobj4, nullobj1, None, True) doc.InsertObject(nullobj3, nullobj1, None, True) doc.InsertObject(nullobj2, nullobj1, None, True) doc.InsertObject(splobj1, nullobj3, None, True) doc.InsertObject(plyobj1, nullobj4, None, True) # Kugeln auf Eckpunkte setzen for i in range(0, NP): obj = c4d.BaseObject(c4d.Osphere) obj[c4d.PRIM_SPHERE_RAD] = Radius obj.SetName(str(i)) x = Punkte[i][0] y = Punkte[i][1] z = Punkte[i][2] obj.SetAbsPos(c4d.Vector(x*Faktor*k, y*Faktor*k, z*Faktor*k)) doc.InsertObject(obj, nullobj2, None, True) c4d.EventAdd() if __name__=='__main__': main()