""" Kachelung 21 10.09.2015 """ import c4d import math # Variablen und Konstanten N = 5 # Anzahl Punkte pro Kante r = 1.0 # Kantenlaenge Sechseck h = 0.5*math.sqrt(3.0) *r # Hoehe Dreieck a = 0.80 # Kantenlaenge Quadrat d = a * math.sqrt(2.0) # Diagonale Quadrat h1 = a*(math.sqrt(2.0) + math.sqrt(6.0))/4.0 # Hoehe Trapez b = r - 2*a*((math.sqrt(6.0) - math.sqrt(2.0))/4) # Oberkante Trapez h2 = 0.5*math.sqrt(3.0) *b # Hoehe kleines Dreieck Abstand_x = 2*r + d Abstand_y = h + h1 + h2 + 0.5*d Versatz_x = r + 0.5*d NS = 7 # Anzahl Sechsecke von der Mitte in einer Richtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Viereck = [] Sexeck = [] Dreieck = [] Trapez = [] #Inversion = True Inversion = False def Invers(z): return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 21") 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) # Trapeze ******************************************************************** def CreateSplineObjectT(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*6) dt = r/N dta= a/N dtb= b/N zz = 0 # Zaehler Punkte # Trapezdaten erzeugen for i in range(0,N): z = complex(-0.5 * r + i * dt, h) Trapez.append(z) for i in range(0,N): z = complex(i * dta ,0) z = Drehung(z, -105) + complex(0.5*r, h) Trapez.append(z) for i in range(0,N): z = complex(0.5*b - i * dtb, h + h1) Trapez.append(z) for i in range(0,N): z = complex(i * dta ,0) z = Drehung(z, 105) + complex(-0.5*b, h + h1) Trapez.append(z) # Trapez duplizieren und drehen for i in range(1,6): for j in range(0,4*N): z = Drehung(Trapez[j], -60*i) Trapez.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,4*N*6): z = Trapez[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, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Trapeze") obj.Message(c4d.MSG_UPDATE) return obj # Quadrate ******************************************************************** def CreateSplineObjectQ(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*3) dta= a/N zz = 0 # Zaehler Punkte # Viereckssdaten erzeugen for i in range(0,N): z = complex(-0.5 * a + i * dta, -0.5 * a) Viereck.append(z) for i in range(0,N): z = complex(0.5*a, -0.5 * a + i * dta) Viereck.append(z) for i in range(0,N): z = complex(0.5*a - i * dta, 0.5 * a) Viereck.append(z) for i in range(0,N): z = complex(-0.5*a, 0.5 * a - i * dta) Viereck.append(z) # Quadrat drehen und verschieben for i in range(0,4*N): Viereck[i] = Drehung(Viereck[i], 45) + complex(r + 0.5*d, 0) # Quadrat duplizieren und drehen for i in range(0,4*N): z = Drehung(Viereck[i], -60) Viereck.append(z) for i in range(0,4*N): z = Drehung(Viereck[i], 60) Viereck.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,4*N*3): z = Viereck[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)*3) for i in range(0, (2*NS+1)*(2*NS+1)*3): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Vierecke") obj.Message(c4d.MSG_UPDATE) return obj # Sechsecke ********************************************************************** def CreateSplineObjectS(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*6*(2*NS+1)*(2*NS+1)) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Sechseckdaten erzeugen for i in range(0,N): z = complex(-0.5 * r + i * dt, -h) Sexeck.append(z) for k in range(1,6): for j in range(0,N): z = Drehung(Sexeck[j], -60*k) Sexeck.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): z = Sexeck[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)) for i in range(0, (2*NS+1)*(2*NS+1)): obj.SetSegment(i, 6*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Sechsecke") obj.Message(c4d.MSG_UPDATE) return obj # Dreiecke ********************************************************************* def CreateSplineObjectD(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*3*(2*NS+1)*(2*NS+1)*2) dtb= b/N zz = 0 # Zaehler Punkte # Dreiecksdaten erzeugen for i in range(0,N): z = complex(-0.5 * b + i * dtb, 0) Dreieck.append(z) for i in range(0,N): z = complex(i * dtb, 0) z = Drehung(z, -120) + complex(0.5*b, 0) Dreieck.append(z) for i in range(0,N): z = complex(i * dtb, 0) z = Drehung(z, 120) + complex(0, h2) Dreieck.append(z) # Dreieck positionieren for i in range(0,3*N): Dreieck[i] = Dreieck[i] + complex(r + 0.5*d, -0.5*d - h2) # Dreieck spiegeln for i in range(0,3*N): z = complex(Dreieck[i].real, -Dreieck[i].imag) Dreieck.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,3*N*2): z = Dreieck[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)*2) for i in range(0, (2*NS+1)*(2*NS+1)*2): obj.SetSegment(i, 3*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Dreiecke") obj.Message(c4d.MSG_UPDATE) return obj def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectD() slinobj2 = CreateSplineObjectQ() slinobj3 = CreateSplineObjectS() slinobj4 = CreateSplineObjectT() doc.InsertObject(nullobj, None, None, True) doc.InsertObject(slinobj1, nullobj, None, True) doc.InsertObject(slinobj2, nullobj, None, True) doc.InsertObject(slinobj4, nullobj, None, True) doc.InsertObject(slinobj3, nullobj, None, True) c4d.EventAdd() if __name__=='__main__': main()