""" Grosses Rhombenkuboktaeder Tunnel 3c 11.03.2021 www.3d-meier.de """ import c4d import math # Variablen und Konstanten Titel = 'Grosses Rhombenkuboktaeder Tunnel 3c' # Name NP = 72 # Anzahl Punkte N3 = 24 # Anzahl Dreiecke N4 = 48 # Anzahl Vierecke Radius = 2 # Radius der Eckpunktkugeln a = (1 + math.sqrt(2))/2.0 b = (1 + 2*math.sqrt(2))/2.0 Punkte = [( 0.5, a, b), # Grosses Rhombenkuboktaeder ( 0.5, a, -b), # Grosses Rhombenkuboktaeder ( 0.5, -a, b), # Grosses Rhombenkuboktaeder ( 0.5, -a, -b), # Grosses Rhombenkuboktaeder (-0.5, a, b), # Grosses Rhombenkuboktaeder (-0.5, a, -b), # Grosses Rhombenkuboktaeder (-0.5, -a, b), # Grosses Rhombenkuboktaeder (-0.5, -a, -b), # Grosses Rhombenkuboktaeder ( a, b, 0.5), # Grosses Rhombenkuboktaeder ( a, -b, 0.5), # Grosses Rhombenkuboktaeder ( -a, b, 0.5), # Grosses Rhombenkuboktaeder ( -a, -b, 0.5), # Grosses Rhombenkuboktaeder ( a, b, -0.5), # Grosses Rhombenkuboktaeder ( a, -b, -0.5), # Grosses Rhombenkuboktaeder ( -a, b, -0.5), # Grosses Rhombenkuboktaeder ( -a, -b, -0.5), # Grosses Rhombenkuboktaeder ( b, 0.5, a), # Grosses Rhombenkuboktaeder ( -b, 0.5, a), # Grosses Rhombenkuboktaeder ( b, 0.5, -a), # Grosses Rhombenkuboktaeder ( -b, 0.5, -a), # Grosses Rhombenkuboktaeder ( b, -0.5, a), # Grosses Rhombenkuboktaeder ( -b, -0.5, a), # Grosses Rhombenkuboktaeder ( b, -0.5, -a), # Grosses Rhombenkuboktaeder ( -b, -0.5, -a), # Grosses Rhombenkuboktaeder ( b, a, 0.5), # Grosses Rhombenkuboktaeder ( -b, a, 0.5), # Grosses Rhombenkuboktaeder ( b, -a, 0.5), # Grosses Rhombenkuboktaeder ( -b, -a, 0.5), # Grosses Rhombenkuboktaeder ( b, a, -0.5), # Grosses Rhombenkuboktaeder ( -b, a, -0.5), # Grosses Rhombenkuboktaeder ( b, -a, -0.5), # Grosses Rhombenkuboktaeder ( -b, -a, -0.5), # Grosses Rhombenkuboktaeder ( a, 0.5, b), # Grosses Rhombenkuboktaeder ( a, 0.5, -b), # Grosses Rhombenkuboktaeder ( -a, 0.5, b), # Grosses Rhombenkuboktaeder ( -a, 0.5, -b), # Grosses Rhombenkuboktaeder ( a, -0.5, b), # Grosses Rhombenkuboktaeder ( a, -0.5, -b), # Grosses Rhombenkuboktaeder ( -a, -0.5, b), # Grosses Rhombenkuboktaeder ( -a, -0.5, -b), # Grosses Rhombenkuboktaeder ( 0.5, b, a), # Grosses Rhombenkuboktaeder ( 0.5, -b, a), # Grosses Rhombenkuboktaeder ( 0.5, b, -a), # Grosses Rhombenkuboktaeder ( 0.5, -b, -a), # Grosses Rhombenkuboktaeder (-0.5, b, a), # Grosses Rhombenkuboktaeder (-0.5, -b, a), # Grosses Rhombenkuboktaeder (-0.5, b, -a), # Grosses Rhombenkuboktaeder (-0.5, -b, -a), # Grosses Rhombenkuboktaeder ( a, 0.5, 0.5), # Rhombenkuboktaeder ( a, 0.5, -0.5), # Rhombenkuboktaeder ( a, -0.5, 0.5), # Rhombenkuboktaeder ( a, -0.5, -0.5), # Rhombenkuboktaeder ( -a, 0.5, 0.5), # Rhombenkuboktaeder ( -a, 0.5, -0.5), # Rhombenkuboktaeder ( -a, -0.5, 0.5), # Rhombenkuboktaeder ( -a, -0.5, -0.5), # Rhombenkuboktaeder ( 0.5, a, 0.5), # Rhombenkuboktaeder ( 0.5, a, -0.5), # Rhombenkuboktaeder ( 0.5, -a, 0.5), # Rhombenkuboktaeder ( 0.5, -a, -0.5), # Rhombenkuboktaeder (-0.5, a, 0.5), # Rhombenkuboktaeder (-0.5, a, -0.5), # Rhombenkuboktaeder (-0.5, -a, 0.5), # Rhombenkuboktaeder (-0.5, -a, -0.5), # Rhombenkuboktaeder ( 0.5, 0.5, a), # Rhombenkuboktaeder ( 0.5, 0.5, -a), # Rhombenkuboktaeder ( 0.5, -0.5, a), # Rhombenkuboktaeder ( 0.5, -0.5, -a), # Rhombenkuboktaeder (-0.5, 0.5, a), # Rhombenkuboktaeder (-0.5, 0.5, -a), # Rhombenkuboktaeder (-0.5, -0.5, a), # Rhombenkuboktaeder (-0.5, -0.5, -a)] # Rhombenkuboktaeder Dreiecke = [(65, 33, 1, 1), # Kuppeln (69, 5, 35, 35), # Kuppeln (71, 39, 7, 7), # Kuppeln (67, 3, 37, 37), # Kuppeln (49, 28, 18, 18), # Kuppeln (51, 22, 30, 30), # Kuppeln (50, 26, 20, 20), # Kuppeln (48, 16, 24, 24), # Kuppeln (64, 0, 32, 32), # Kuppeln (66, 36, 2, 2), # Kuppeln (70, 6, 38, 38), # Kuppeln (68, 34, 4, 4), # Kuppeln (52, 25, 17, 17), # Kuppeln (54, 21, 27, 27), # Kuppeln (55, 31, 23, 23), # Kuppeln (53, 19, 29, 29), # Kuppeln (56, 8, 40, 40), # Kuppeln (60, 44, 10, 10), # Kuppeln (61, 14, 46, 46), # Kuppeln (57, 42, 12, 12), # Kuppeln (62, 11, 45, 45), # Kuppeln (58, 41, 9, 9), # Kuppeln (59, 13, 43, 43), # Kuppeln (63, 47, 15, 15)] # Kuppeln Vierecke = [(66, 36, 20, 50), # Hexaeder 1 (50, 20, 16, 48), # Hexaeder 1 (48, 16, 32, 64), # Hexaeder 1 (64, 32, 36, 66), # Hexaeder 1 (51, 22, 37, 67), # Hexaeder 2 (67, 37, 33, 65), # Hexaeder 2 (65, 33, 18, 49), # Hexaeder 2 (49, 18, 22, 51), # Hexaeder 2 (71, 39, 23, 55), # Hexaeder 3 (55, 23, 19, 53), # Hexaeder 3 (53, 19, 35, 69), # Hexaeder 3 (69, 35, 39, 71), # Hexaeder 3 (54, 21, 38, 70), # Hexaeder 4 (70, 38, 34, 68), # Hexaeder 4 (68, 34, 17, 52), # Hexaeder 4 (52, 17, 21, 54), # Hexaeder 4 (63, 15, 11, 62), # Hexaeder 5 (62, 11, 27, 54), # Hexaeder 5 (54, 27, 31, 55), # Hexaeder 5 (55, 31, 15, 63), # Hexaeder 5 (70, 6, 45, 62), # Hexaeder 6 (62, 45, 41, 58), # Hexaeder 6 (58, 41, 2, 66), # Hexaeder 6 (66, 2, 6, 70), # Hexaeder 6 (58, 9, 13, 59), # Hexaeder 7 (59, 13, 30, 51), # Hexaeder 7 (51, 30, 26, 50), # Hexaeder 7 (50, 26, 9, 58), # Hexaeder 7 (59, 43, 47, 63), # Hexaeder 8 (63, 47, 7, 71), # Hexaeder 8 (71, 7, 3, 67), # Hexaeder 8 (67, 3, 43, 59), # Hexaeder 8 (61, 46, 42, 57), # Hexaeder 9 (57, 42, 1, 65), # Hexaeder 9 (65, 1, 5, 69), # Hexaeder 9 (69, 5, 46, 61), # Hexaeder 9 (57, 12, 8, 56), # Hexaeder 10 (56, 8, 24, 48), # Hexaeder 10 (48, 24, 28, 49), # Hexaeder 10 (49, 28, 12, 57), # Hexaeder 10 (56, 40, 44, 60), # Hexaeder 11 (60, 44, 4, 68), # Hexaeder 11 (68, 4, 0, 64), # Hexaeder 11 (64, 0, 40, 56), # Hexaeder 11 (60, 10, 14, 61), # Hexaeder 12 (61, 14, 29, 53), # Hexaeder 12 (53, 29, 25, 52), # Hexaeder 12 (52, 25, 10, 60)] # Hexaeder 12 Faktor = 100 # Skalierungsfaktor k = 1 # Korrekturfaktor fuer Kantenlaenge 1 #************************************************************************ 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 CreateVierecke(): obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject(NP, N4) obj.SetName('Vierecke') # 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)) # Vierecke setzen for i in xrange(N4): obj.SetPolygon(i, c4d.CPolygon(Vierecke[i][0], Vierecke[i][1], Vierecke[i][2], Vierecke[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 CreateSplineVierecke(): obj = c4d.BaseObject(c4d.Ospline) obj.SetName("Spline-Vierecke") obj.ResizeObject(N4*4) zz = 0 for i in xrange(N4): for j in xrange(4): x = Punkte[Vierecke[i][j]][0] y = Punkte[Vierecke[i][j]][1] z = Punkte[Vierecke[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, N4) for i in range(0, N4): obj.SetSegment(i, 4, 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() plyobj2 = CreateVierecke() splobj1 = CreateSplineDreiecke() splobj2 = CreateSplineVierecke() 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(splobj2, nullobj3, None, True) doc.InsertObject(splobj1, nullobj3, None, True) doc.InsertObject(plyobj2, nullobj4, 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()