""" 12 6-Eck Prismen 04.05.2021 www.3d-meier.de """ import c4d import math # Variablen und Konstanten Titel = '12 6-Eck Prismen' # Name NP = 96 # Anzahl Punkte N4 = 48 # Anzahl Vierecke N6 = 24 # Anzahl Sechsecke Radius = 5 # Radius der Eckpunktkugeln a = math.sqrt(3) # 1,7321 b = 3.0 # 3,0000 c = 2*math.sqrt(3) # 3,4641 d = math.sqrt(3)/2.0 # 0,8660 e = 1.25*math.sqrt(3) # 2,1651 f = 1.75*math.sqrt(3) # 3,0311 Faktor = 100 # Skalierungsfaktor k = 1 # Korrekturfaktor Punkte = [( 1.00, 0.5, c), # Prisma 1 ( 0.50, 0.5, d+c), # Prisma 1 (-0.50, 0.5, d+c), # Prisma 1 (-1.00, 0.5, c), # Prisma 1 (-0.50, 0.5, -d+c), # Prisma 1 ( 0.50, 0.5, -d+c), # Prisma 1 ( 1.00, -0.5, c), # Prisma 1 ( 0.50, -0.5, d+c), # Prisma 1 (-0.50, -0.5, d+c), # Prisma 1 (-1.00, -0.5, c), # Prisma 1 (-0.50, -0.5, -d+c), # Prisma 1 ( 0.50, -0.5, -d+c), # Prisma 1 ( 4.00, 0.5, a), # Prisma 2 ( 3.50, 0.5, d+a), # Prisma 2 ( 2.50, 0.5, d+a), # Prisma 2 ( 2.00, 0.5, a), # Prisma 2 ( 2.50, 0.5, -d+a), # Prisma 2 ( 3.50, 0.5, -d+a), # Prisma 2 ( 4.00, -0.5, a), # Prisma 2 ( 3.50, -0.5, d+a), # Prisma 2 ( 2.50, -0.5, d+a), # Prisma 2 ( 2.00, -0.5, a), # Prisma 2 ( 2.50, -0.5, -d+a), # Prisma 2 ( 3.50, -0.5, -d+a), # Prisma 2 ( 4.00, 0.5, -a), # Prisma 3 ( 3.50, 0.5, d-a), # Prisma 3 ( 2.50, 0.5, d-a), # Prisma 3 ( 2.00, 0.5, -a), # Prisma 3 ( 2.50, 0.5, -d-a), # Prisma 3 ( 3.50, 0.5, -d-a), # Prisma 3 ( 4.00, -0.5, -a), # Prisma 3 ( 3.50, -0.5, d-a), # Prisma 3 ( 2.50, -0.5, d-a), # Prisma 3 ( 2.00, -0.5, -a), # Prisma 3 ( 2.50, -0.5, -d-a), # Prisma 3 ( 3.50, -0.5, -d-a), # Prisma 3 ( 1.00, 0.5, -c), # Prisma 4 ( 0.50, 0.5, d-c), # Prisma 4 (-0.50, 0.5, d-c), # Prisma 4 (-1.00, 0.5, -c), # Prisma 4 (-0.50, 0.5, -d-c), # Prisma 4 ( 0.50, 0.5, -d-c), # Prisma 4 ( 1.00, -0.5, -c), # Prisma 4 ( 0.50, -0.5, d-c), # Prisma 4 (-0.50, -0.5, d-c), # Prisma 4 (-1.00, -0.5, -c), # Prisma 4 (-0.50, -0.5, -d-c), # Prisma 4 ( 0.50, -0.5, -d-c), # Prisma 4 (-2.00, 0.5, -a), # Prisma 5 (-2.50, 0.5, d-a), # Prisma 5 (-3.50, 0.5, d-a), # Prisma 5 (-4.00, 0.5, 0-a), # Prisma 5 (-3.50, 0.5, -d-a), # Prisma 5 (-2.50, 0.5, -d-a), # Prisma 5 (-2.00, -0.5, -a), # Prisma 5 (-2.50, -0.5, d-a), # Prisma 5 (-3.50, -0.5, d-a), # Prisma 5 (-4.00, -0.5, -a), # Prisma 5 (-3.50, -0.5, -d-a), # Prisma 5 (-2.50, -0.5, -d-a), # Prisma 5 (-2.00, 0.5, a), # Prisma 6 (-2.50, 0.5, d+a), # Prisma 6 (-3.50, 0.5, d+a), # Prisma 6 (-4.00, 0.5, a), # Prisma 6 (-3.50, 0.5, -d+a), # Prisma 6 (-2.50, 0.5, -d+a), # Prisma 6 (-2.00, -0.5, a), # Prisma 6 (-2.50, -0.5, d+a), # Prisma 6 (-3.50, -0.5, d+a), # Prisma 6 (-4.00, -0.5, a), # Prisma 6 (-3.50, -0.5, -d+a), # Prisma 6 (-2.50, -0.5, -d+a), # Prisma 6 ( 1.25, 1.0, e), # Prisma 7 ( 1.75, 1.0, f), # Prisma 7 ( 1.25, -1.0, e), # Prisma 7 ( 1.75, -1.0, f), # Prisma 7 ( 2.50, 1.0, 0), # Prisma 8 ( 3.50, 1.0, 0), # Prisma 8 ( 2.50, -1.0, 0), # Prisma 8 ( 3.50, -1.0, 0), # Prisma 8 ( 1.25, 1.0, -e), # Prisma 9 ( 1.75, 1.0, -f), # Prisma 9 ( 1.25, -1.0, -e), # Prisma 9 ( 1.75, -1.0, -f), # Prisma 9 (-1.25, 1.0, -e), # Prisma 10 (-1.75, 1.0, -f), # Prisma 10 (-1.25, -1.0, -e), # Prisma 10 (-1.75, -1.0, -f), # Prisma 10 (-2.50, 1.0, 0), # Prisma 11 (-3.50, 1.0, 0), # Prisma 11 (-2.50, -1.0, 0), # Prisma 11 (-3.50, -1.0, 0), # Prisma 11 (-1.25, 1.0, e), # Prisma 12 (-1.75, 1.0, f), # Prisma 12 (-1.25, -1.0, e), # Prisma 12 (-1.75, -1.0, f)] # Prisma 12 Vierecke = [( 8, 2, 3, 9), # Prisma 1 ( 7, 1, 2, 8), # Prisma 1 ( 6, 0, 1, 7), # Prisma 1 ( 10, 4, 5, 11), # Prisma 1 ( 9+12, 3+12, 4+12, 10+12), # Prisma 2 ( 7+12, 1+12, 2+12, 8+12), # Prisma 2 ( 6+12, 0+12, 1+12, 7+12), # Prisma 2 (11+12, 5+12, 0+12, 6+12), # Prisma 2 ( 8+24, 2+24, 3+24, 9+24), # Prisma 3 ( 6+24, 0+24, 1+24, 7+24), # Prisma 3 (11+24, 5+24, 0+24, 6+24), # Prisma 3 (10+24, 4+24, 5+24, 11+24), # Prisma 3 ( 9+36, 3+36, 4+36, 10+36), # Prisma 4 ( 7+36, 1+36, 2+36, 8+36), # Prisma 4 (11+36, 5+36, 0+36, 6+36), # Prisma 4 (10+36, 4+36, 5+36, 11+36), # Prisma 4 ( 9+48, 3+48, 4+48, 10+48), # Prisma 5 ( 8+48, 2+48, 3+48, 9+48), # Prisma 5 ( 6+48, 0+48, 1+48, 7+48), # Prisma 5 (10+48, 4+48, 5+48, 11+48), # Prisma 5 ( 9+60, 3+60, 4+60, 10+60), # Prisma 6 ( 8+60, 2+60, 3+60, 9+60), # Prisma 6 ( 7+60, 1+60, 2+60, 8+60), # Prisma 6 (11+60, 5+60, 0+60, 6+60), # Prisma 6 ( 5, 0, 73, 72), # Prisma 7 ( 72, 73, 14, 15), # Prisma 7 ( 21, 20, 75, 74), # Prisma 7 ( 74, 75, 6, 11), # Prisma 7 ( 16, 17, 77, 76), # Prisma 8 ( 76, 77, 25, 26), # Prisma 8 ( 32, 31, 79, 78), # Prisma 8 ( 78, 79, 23, 22), # Prisma 8 ( 27, 28, 81, 80), # Prisma 9 ( 80, 81, 36, 37), # Prisma 9 ( 43, 42, 83, 82), # Prisma 9 ( 82, 83, 34, 33), # Prisma 9 ( 38, 39, 85, 84), # Prisma 10 ( 84, 85, 53, 48), # Prisma 10 ( 54, 59, 87, 86), # Prisma 10 ( 86, 87, 45, 44), # Prisma 10 ( 49, 50, 89, 88), # Prisma 11 ( 88, 89, 64, 65), # Prisma 11 ( 56, 55, 90, 91), # Prisma 11 ( 91, 90, 71, 70), # Prisma 11 ( 60, 61, 93, 92), # Prisma 12 ( 92, 93, 3, 4), # Prisma 12 ( 67, 66, 94, 95), # Prisma 12 ( 95, 94, 10, 9)] # Prisma 12 Sechsecke = [( 5, 4, 3, 2, 1, 0), # Prisma 1 ( 6, 7, 8, 9, 10, 11), # Prisma 1 (5+12, 4+12, 3+12, 2+12, 1+12, 0+12), # Prisma 2 (6+12, 7+12, 8+12, 9+12, 10+12, 11+12), # Prisma 2 (5+24, 4+24, 3+24, 2+24, 1+24, 0+24), # Prisma 3 (6+24, 7+24, 8+24, 9+24, 10+24, 11+24), # Prisma 3 (5+36, 4+36, 3+36, 2+36, 1+36, 0+36), # Prisma 4 (6+36, 7+36, 8+36, 9+36, 10+36, 11+36), # Prisma 4 (5+48, 4+48, 3+48, 2+48, 1+48, 0+48), # Prisma 5 (6+48, 7+48, 8+48, 9+48, 10+48, 11+48), # Prisma 5 (5+60, 4+60, 3+60, 2+60, 1+60, 0+60), # Prisma 6 (6+60, 7+60, 8+60, 9+60, 10+60, 11+60), # Prisma 6 ( 72, 15, 21, 74, 11, 5), # Prisma 7 ( 73, 0, 6, 75, 20, 14), # Prisma 7 ( 78, 22, 16, 76, 26, 32), # Prisma 8 ( 79, 31, 25, 77, 17, 23), # Prisma 8 ( 82, 33, 27, 80, 37, 43), # Prisma 9 ( 83, 42, 36, 81, 28, 34), # Prisma 9 ( 84, 48, 54, 86, 44, 38), # Prisma 10 ( 85, 39, 45, 87, 59, 53), # Prisma 10 ( 88, 65, 71, 90, 55, 49), # Prisma 11 ( 89, 50, 56, 91, 70, 64), # Prisma 11 ( 92, 4, 10, 94, 66, 60), # Prisma 12 ( 93, 61, 67, 95, 9, 3)] # Prisma 12 #************************************************************************ 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 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 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 = CreateVierecke() plyobj2 = CreateSechsecke() splobj1 = CreateSplineVierecke() splobj2 = 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(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()