""" Kachelung 34 12.10.2015 """ import c4d import math # Variablen und Konstanten N = 5 # Anzahl Punkte pro Kante r = 1.0 # Kantenlänge rin = (r* math.cos(math.pi/9))/(2*math.sin(math.pi/9)) # Inkreisradius Neuneck h = 0.5 * math.sqrt(3.0) * (2*rin) # Hoehe grosses Dreieck a = r*math.cos(5*math.pi/18) b = r*math.sin(5*math.pi/18) Abstand_x = 6*rin Abstand_y = h Versatz_x = 3*rin NS = 5 # Anzahl Wiederholungen in eine Richtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Neuneck = [] Raute1 = [] Raute2 = [] Stern = [] #Inversion = True Inversion = False def Invers(z): return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 34") 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) # Stern **************************************************************************** def CreateSplineObjectS(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*12*(2*NS+1)*(2*NS+1)) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Sterndaten aus Raute 1 erzeugen for i in range(N,3*N): z = Raute1[i] Stern.append(z) # Sternzacke duplizieren und drehen for k in range(1,6): for j in range(0, 2*N): z = Drehung(Stern[j], 60*k) Stern.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,12*N): z = Stern[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, 12*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Stern") obj.Message(c4d.MSG_UPDATE) return obj # Rauten 1 **************************************************************************** def CreateSplineObjectR1(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*3) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -50) + complex(0, -h + 0.5*r) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -130) + complex(a, -h + 0.5*r + b) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 130) + complex(0, -h + 0.5*r + 2*b) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 50) + complex(-a, -h + 0.5*r + b) Raute1.append(z) # Raute duplizieren und drehen for k in range(1,3): for j in range(0,4*N): z = Drehung(Raute1[j], 120*k) Raute1.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 = Raute1[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("Rauten 1") obj.Message(c4d.MSG_UPDATE) return obj # Rauten 2 **************************************************************************** def CreateSplineObjectR2(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*3) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Rautendaten aus Raute 1 erzeugen for k in range(1,3): for j in range(0,4*N*3): z = Drehung(Raute1[j], 60*k) Raute2.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 = Raute2[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("Rauten 2") obj.Message(c4d.MSG_UPDATE) return obj # Neunecke ********************************************************************************** def CreateSplineObjectN(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*9*(2*NS+1)*(2*NS+1)*2) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Neuneckdaten erzeugen for i in range(0,N): z = complex(rin, -0.5 * r + i * dt) Neuneck.append(z) for k in range(1,9): for j in range(0,N): z = Drehung(Neuneck[j], -40*k) Neuneck.append(z) # Neuneck verschieben for i in range(0,9*N): Neuneck[i] = Neuneck[i] + complex(2*rin, 0) # Neuneck spiegeln for i in range(0,9*N): z = complex(-Neuneck[i].real, Neuneck[i].imag) Neuneck.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,9*N*2): z = Neuneck[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, 9*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Neunecke") obj.Message(c4d.MSG_UPDATE) return obj def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectN() slinobj2 = CreateSplineObjectR1() slinobj3 = CreateSplineObjectR2() slinobj4 = CreateSplineObjectS() 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()