""" Tunnel 19 11.05.2021 www.3d-meier.de """ import c4d import math # Variablen und Konstanten Titel = 'Tunnel 19' # Name NP = 96 # Anzahl Punkte N3 = 24 # Anzahl Dreiecke N4 = 84 # Anzahl Vierecke N6 = 12 # Anzahl Sechsecke Radius = 2 # Radius der Eckpunktkugeln a = math.sqrt(3)/3 # 0.57735 48 b = math.sqrt(2)/2 # 0.70711 48 c = (math.sqrt(3)/3) + (math.sqrt(2)/2) # 1.28446 48 d = math.sqrt(2) # 1.41421 24 e = math.sqrt(2) + math.sqrt(3)/3 # 1.99156 48 f = 2*(math.sqrt(3)/3) + math.sqrt(2) # 2.56891 24 # 0.00000 48 Faktor = 100 # Skalierungsfaktor k = 1 Punkte = [( 0, b, f), ( b, 0, f), ( 0, f, -b), ( b, f, 0), ( 0, f, b), (-b, -f, 0), ( 0, -f, b), ( 0, -f, -b), (-b, 0, -f), ( 0, -b, -f), ( b, 0, -f), (-b, 0, f), ( e, -c, -a), ( f, -b, 0), ( f, 0, -b), ( f, b, 0), ( f, 0, b), ( e, c, a), ( a, e, -c), (-b, f, 0), (-c, e, a), ( a, e, c), (-e, a, -c), (-e, c, -a), (-f, b, 0), (-f, 0, -b), (-f, -b, 0), (-f, 0, b), (-e, -a, c), ( c, -e, -a), ( b, -f, 0), ( 0, b, -f), (-c, -a, -e), ( e, -a, c), ( e, a, c), ( a, c, e), (-a, c, e), ( 0, -b, f), (-a, -e, c), (-a, -c, e), ( a, -c, e), ( e, a, -c), ( e, -a, -c), ( c, a, -e), ( c, e, -a), ( e, c, -a), ( c, -e, a), (-a, e, -c), (-e, c, a), (-c, a, -e), (-c, -e, -a), (-e, -c, a), ( c, a, e), (-a, -e, -c), ( b, -d, 0), ( a, -e, c), (-d, b, 0), (-c, e, -a), ( d, b, 0), (-b, 0, d), (-c, -a, e), (-d, -b, 0), (-c, -e, a), (-d, 0, b), (-c, a, e), (-e, a, c), ( a, -e, -c), (-b, d, 0), ( 0, -b, -d), ( c, -a, -e), ( 0, b, d), (-a, e, c), ( 0, d, b), (-b, 0, -d), (-a, c, -e), ( e, -c, a), ( 0, -b, d), ( c, -a, e), ( 0, b, -d), ( a, c, -e), (-a, -c, -e), (-e, -a, -c), (-d, 0, -b), ( c, e, a), (-e, -c, -a), (-b, -d, 0), ( d, 0, -b), ( a, -c, -e), ( d, -b, 0), ( d, 0, b), ( b, 0, -d), ( b, 0, d), ( 0, -d, -b), ( 0, -d, b), ( 0, d, -b), ( b, d, 0)] Dreiecke = [(21, 4, 71, 71), (20, 19, 57, 57), (47, 2, 18, 18), (44, 3, 83, 83), (31, 74, 79, 79), (10, 43, 69, 69), (80, 9, 87, 87), (32, 49, 8, 8), ( 7, 53, 66, 66), (46, 30, 29, 29), (38, 6, 55, 55), (50, 5, 62, 62), (26, 84, 51, 51), (27, 28, 65, 65), (23, 24, 48, 48), (22, 81, 25, 25), (37, 39, 40, 40), ( 1, 77, 52, 52), (36, 0, 35, 35), (64, 60, 11, 11), (34, 33, 16, 16), (13, 75, 12, 12), (14, 42, 41, 41), (17, 15, 45, 45)] Vierecke = [(85, 93, 54, 92), # Oktaederstumpf (70, 91, 76, 59), # Oktaederstumpf (58, 86, 88, 89), # Oktaederstumpf (78, 73, 68, 90), # Oktaederstumpf (67, 94, 95, 72), # Oktaederstumpf (61, 82, 56, 63), # Oktaederstumpf (94, 18, 44, 95), # 6-Eck Prisma 1 (78, 79, 18, 94), # 6-Eck Prisma 1 (90, 43, 79, 78), # 6-Eck Prisma 1 (86, 41, 43, 90), # 6-Eck Prisma 1 (58, 45, 41, 86), # 6-Eck Prisma 1 (95, 44, 45, 58), # 6-Eck Prisma 1 (95, 83, 21, 72), # 6-Eck Prisma 2 (72, 21, 35, 70), # 6-Eck Prisma 2 (70, 35, 52, 91), # 6-Eck Prisma 2 (91, 52, 34, 89), # 6-Eck Prisma 2 (89, 34, 17, 58), # 6-Eck Prisma 2 (58, 17, 83, 95), # 6-Eck Prisma 2 (89, 33, 77, 91), # 6-Eck Prisma 3 (91, 77, 40, 76), # 6-Eck Prisma 3 (76, 40, 55, 93), # 6-Eck Prisma 3 (93, 55, 46, 54), # 6-Eck Prisma 3 (54, 46, 75, 88), # 6-Eck Prisma 3 (88, 75, 33, 89), # 6-Eck Prisma 3 (85, 62, 38, 93), # 6-Eck Prisma 4 (93, 38, 39, 76), # 6-Eck Prisma 4 (76, 39, 60, 59), # 6-Eck Prisma 4 (59, 60, 28, 63), # 6-Eck Prisma 4 (63, 28, 51, 61), # 6-Eck Prisma 4 (61, 51, 62, 85), # 6-Eck Prisma 4 (85, 50, 84, 61), # 6-Eck Prisma 5 (61, 84, 81, 82), # 6-Eck Prisma 5 (82, 81, 32, 73), # 6-Eck Prisma 5 (73, 32, 80, 68), # 6-Eck Prisma 5 (68, 80, 53, 92), # 6-Eck Prisma 5 (92, 53, 50, 85), # 6-Eck Prisma 5 (92, 66, 87, 68), # 6-Eck Prisma 6 (68, 87, 69, 90), # 6-Eck Prisma 6 (90, 69, 42, 86), # 6-Eck Prisma 6 (86, 42, 12, 88), # 6-Eck Prisma 6 (88, 12, 29, 54), # 6-Eck Prisma 6 (54, 29, 66, 92), # 6-Eck Prisma 6 (78, 74, 49, 73), # 6-Eck Prisma 7 (73, 49, 22, 82), # 6-Eck Prisma 7 (82, 22, 23, 56), # 6-Eck Prisma 7 (56, 23, 57, 67), # 6-Eck Prisma 7 (67, 57, 47, 94), # 6-Eck Prisma 7 (94, 47, 74, 78), # 6-Eck Prisma 7 (67, 20, 48, 56), # 6-Eck Prisma 8 (56, 48, 65, 63), # 6-Eck Prisma 8 (63, 65, 64, 59), # 6-Eck Prisma 8 (59, 64, 36, 70), # 6-Eck Prisma 8 (70, 36, 71, 72), # 6-Eck Prisma 8 (72, 71, 20, 67), # 6-Eck Prisma 8 (30, 7, 66, 29), # Quadratkuppel 1 ( 6, 5, 7, 30), # Quadratkuppel 1 (38, 62, 5, 6), # Quadratkuppel 1 (53, 7, 5, 50), # Quadratkuppel 1 (30, 46, 55, 6), # Quadratkuppel 1 (69, 87, 9, 10), # Quadratkuppel 2 (10, 9, 8, 31), # Quadratkuppel 2 (31, 8, 49, 74), # Quadratkuppel 2 (43, 10, 31, 79), # Quadratkuppel 2 ( 9, 80, 32, 8), # Quadratkuppel 2 (33, 75, 13, 16), # Quadratkuppel 3 (16, 13, 14, 15), # Quadratkuppel 3 (15, 14, 41, 45), # Quadratkuppel 3 (34, 16, 15, 17), # Quadratkuppel 3 (13, 12, 42, 14), # Quadratkuppel 3 (44, 18, 2, 3), # Quadratkuppel 4 ( 3, 2, 19, 4), # Quadratkuppel 4 ( 4, 19, 20, 71), # Quadratkuppel 4 (83, 3, 4, 21), # Quadratkuppel 4 ( 2, 47, 57, 19), # Quadratkuppel 4 (65, 48, 24, 27), # Quadratkuppel 5 (27, 24, 25, 26), # Quadratkuppel 5 (26, 25, 81, 84), # Quadratkuppel 5 (28, 27, 26, 51), # Quadratkuppel 5 (24, 23, 22, 25), # Quadratkuppel 5 (52, 35, 0, 1), # Quadratkuppel 6 ( 1, 0, 11, 37), # Quadratkuppel 6 (37, 11, 60, 39), # Quadratkuppel 6 (77, 1, 37, 40), # Quadratkuppel 6 ( 0, 36, 64, 11)] # Quadratkuppel 6 Sechsecke = [(21, 4, 71, 36, 0, 35), (20, 19, 57, 23, 24, 48), (47, 2, 18, 79, 31, 74), (49, 8, 32, 81, 25, 22), ( 3, 83, 17, 15, 45, 44), (41, 14, 42, 69, 10, 43), (52, 1, 77, 33, 16, 34), (13, 75, 46, 30, 29, 12), (55, 40, 37, 39, 38, 6), (84, 50, 5, 62, 51, 26), (80, 9, 87, 66, 7, 53), (60, 11, 64, 65, 27, 28)] #************************************************************************ 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[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] = 1 obj[c4d.ID_BASEOBJECT_VISIBILITY_RENDER] = 1 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 CreateSechsecke(): obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject(NP, N6*2) obj.SetName('Sechsecke') # 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 zz = 0 # Zähler für Polygone zurücksetzen for i in xrange(N6): obj.SetPolygon(zz, c4d.CPolygon(Sechsecke[i][0], Sechsecke[i][1], Sechsecke[i][2], Sechsecke[i][5])) zz = zz + 1 obj.SetPolygon(zz, c4d.CPolygon(Sechsecke[i][2], Sechsecke[i][3], Sechsecke[i][4], Sechsecke[i][5])) zz = zz + 1 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[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] = 1 obj[c4d.ID_BASEOBJECT_VISIBILITY_RENDER] = 1 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 CreateSplineSechsecke(): obj = c4d.BaseObject(c4d.Ospline) obj.SetName("Spline-Sechsecke") obj.ResizeObject(N6*6) zz = 0 for i in xrange(N6): for j in xrange(6): x = Punkte[Sechsecke[i][j]][0] y = Punkte[Sechsecke[i][j]][1] z = Punkte[Sechsecke[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, N6) for i in range(0, N6): obj.SetSegment(i, 6, 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() plyobj3 = CreateSechsecke() splobj1 = CreateSplineDreiecke() splobj2 = CreateSplineVierecke() splobj3 = CreateSplineSechsecke() 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(splobj3, nullobj3, None, True) doc.InsertObject(splobj2, nullobj3, None, True) doc.InsertObject(splobj1, nullobj3, None, True) doc.InsertObject(plyobj3, nullobj4, 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()