""" Kachelung 29 10.09.2015 """ import c4d import math # Variablen und Konstanten N = 5 # Anzahl Punkte pro Kante r = 1.0 # Kantenlaenge ria = r/(2.0*math.tan(math.pi/18)) # Inkreisradius Achtzehneck rua = r/(2*math.sin(math.pi/18)) # Umkreisradius Achtzehneck h = 0.5 * math.sqrt(3.0) * r # Hoehe Dreieck h1 = 0.5 * math.sqrt(3.0) * (2*ria + 4*h) # Hoehe grosses Dreieck rid = (math.sqrt(3.0) * (2*ria + 4*h))/6.0 # Inkreisradius grosses Dreieck a = r + (rid - 2.5*r) # Kantenlaenge laengliches Sechseck Abstand_x = 2*ria + 4*h Abstand_y = h1 Versatz_x = ria + 2*h NS = 5 # Anzahl Wiederholungen in eine Richtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Achtzehneck = [] Sexeck1 = [] Sexeck2 = [] Sexeck3 = [] #Inversion = True Inversion = False def Invers(z): return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 29") obj.Message(c4d.MSG_UPDATE) return obj def Drehung(z, Grad): Winkel = Grad * math.pi/180 x = z.real y = z.imag x1 = math.cos(Winkel) * x + math.sin(Winkel) * y y1 = -math.sin(Winkel) * x + math.cos(Winkel) * y return complex(x1, y1) # Sechsecke 1 **************************************************************************** def CreateSplineObjectS1(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*6*(2*NS+1)*(2*NS+1)*6) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Sechseckdaten erzeugen for i in range(0,N): z = complex(-h, -0.5 * r + i * dt) Sexeck1.append(z) for k in range(1,6): for j in range(0,N): z = Drehung(Sexeck1[j], 60*k) Sexeck1.append(z) # Sechseck verschieben for i in range(0,6*N): Sexeck1[i] = Sexeck1[i] + complex(ria + h, 0) # Sechseck duplizieren und drehen for k in range(1,6): for j in range(0,6*N): z = Drehung(Sexeck1[j], 60*k) Sexeck1.append(z) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,6*N*6): z = Sexeck1[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*6) for i in range(0, (2*NS+1)*(2*NS+1)*6): obj.SetSegment(i, 6*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Sechsecke 1") obj.Message(c4d.MSG_UPDATE) return obj # Sechsecke 2 **************************************************************************** def CreateSplineObjectS2(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*6*(2*NS+1)*(2*NS+1)*6) dt= r/N # Unterteilung Kante dta= a/N # Unterteilung lange Kante zz = 0 # Zaehler Punkte # Sechseckdaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 30) Sexeck2.append(z) for i in range(0,N): z = complex(h, -0.5*r - i*dta) Sexeck2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 150) + complex(h, -(0.5*r + a)) Sexeck2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -150) + complex(0, -(r + a)) Sexeck2.append(z) for i in range(0,N): z = complex(-h, -(0.5*r + a) + i*dta) Sexeck2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -30) + complex(-h, -0.5*r) Sexeck2.append(z) # Sechseck drehen und duplizieren for i in range(0,6*N): z = Drehung(Sexeck2[i], 120) Sexeck2.append(z) for i in range(0,6*N): z = Drehung(Sexeck2[i], -120) Sexeck2.append(z) # Sechsecke verschieben for i in range(0,6*N*3): Sexeck2[i] = Sexeck2[i] + complex(ria + 2*h, rid) # Sechsecke spiegeln for i in range(0,6*N*3): z = complex(Sexeck2[i].real, -Sexeck2[i].imag) Sexeck2.append(z) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,6*N*6): z = Sexeck2[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*6) for i in range(0, (2*NS+1)*(2*NS+1)*6): obj.SetSegment(i, 6*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Sechsecke 2") obj.Message(c4d.MSG_UPDATE) return obj # Sechsecke 3 **************************************************************************** def CreateSplineObjectS3(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*6*(2*NS+1)*(2*NS+1)*6) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Sechseckdaten erzeugen (aus den anderen Polygonen) for i in range(7*N,9*N): z = Achtzehneck[i] Sexeck3.append(z) for i in range(N,2*N): z = Sexeck1[i] Sexeck3.append(z) for i in range(4*N,5*N): z = Sexeck2[i] Sexeck3.append(z) for i in range(7*N,8*N): z = Sexeck2[i] Sexeck3.append(z) for i in range(35*N,36*N): z = Sexeck1[i] Sexeck3.append(z) # Sechseck duplizieren und drehen for k in range(1,6): for j in range(0,6*N): z = Drehung(Sexeck3[j], 60*k) Sexeck3.append(z) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,6*N*6): z = Sexeck3[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*6) for i in range(0, (2*NS+1)*(2*NS+1)*6): obj.SetSegment(i, 6*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Sechsecke 3") obj.Message(c4d.MSG_UPDATE) return obj # Achtzehnecke **************************************************************************** def CreateSplineObjectA(): # Splineobjekte erzeugen obj1 = c4d.BaseObject(c4d.Ospline) obj1.ResizeObject(N*18*(2*NS+1)*(2*NS+1)) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Achtzehneckdaten erzeugen for i in range(0,N): z = complex(-ria, -0.5 * r + i * dt ) Achtzehneck.append(z) for k in range(1,18): for j in range(0,N): z = Drehung(Achtzehneck[j], 20*k) Achtzehneck.append(z) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,18*N): z = Achtzehneck[i] + complex(x0, y0) if Inversion: z = Invers(z) obj1.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj1.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)) for i in range(0, (2*NS+1)*(2*NS+1)): obj1.SetSegment(i, 18*N, True) obj1[c4d.SPLINEOBJECT_CLOSED] = True obj1.SetName("Achtzehnecke") obj1.Message(c4d.MSG_UPDATE) return obj1 def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectA() slinobj2 = CreateSplineObjectS1() slinobj3 = CreateSplineObjectS2() slinobj4 = CreateSplineObjectS3() doc.InsertObject(nullobj, None, None, True) doc.InsertObject(slinobj4, nullobj, None, True) doc.InsertObject(slinobj3, nullobj, None, True) doc.InsertObject(slinobj2, nullobj, None, True) doc.InsertObject(slinobj1, nullobj, None, True) c4d.EventAdd() if __name__=='__main__': main()