""" Kachelung 10 10.09.2015 """ import c4d import math # Variablen und Konstanten N = 32 # Anzahl Punkte pro Kante a = 1.2 # Kantenlänge Fünfeck b = 2*a*math.sqrt(1 - 0.5*math.sqrt(3.0)) # Basislinie Fünfeck h = a*math.sqrt(1 + 0.5*math.sqrt(3.0)) # Höhe Fünfeck h1 = 0.5 * math.sqrt(3.0) * a # Höhe Dreieck Abstand_x = 2*h + b Abstand_y = h + 0.5*b Versatz_x = h + 0.5*b NS = 1 # Anzahl Wiederholungen von der Mitte in einer Richtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Fuenfeck1 = [] Fuenfeck2 = [] Fuenfeck3 = [] Fuenfeck4 = [] #Inversion = True Inversion = False def Invers(z): if abs(z) == 0: z = complex(z.real, z.imag + 0.0001) return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 10") 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) # Fünfecke 1 ************************************************************** def CreateSplineObjectF1(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)) dta= a/N # Unterteilung Kante a dtb= b/N # Unterteilung Kante b zz = 0 # Zähler Punkte # Fünfeckdaten erzeugen for i in range(0,N): z = complex(-0.5 * b + i * dtb, 0) Fuenfeck1.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -60) + complex(0.5*b, 0) Fuenfeck1.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -150) + complex(0.5*b + 0.5*a, h1) Fuenfeck1.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, 150) + complex(0, h) Fuenfeck1.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, 60) + complex(-0.5*b - 0.5*a, h1) Fuenfeck1.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,5*N): z = Fuenfeck1[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, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fünfecke 1") obj.Message(c4d.MSG_UPDATE) return obj # Fünfecke 2 *************************************************************** def CreateSplineObjectF2(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)) dta= a/N # Unterteilung Kante a dtb= b/N # Unterteilung Kante b zz = 0 # Zähler Punkte # Fünfeckdaten erzeugen for i in range(0,5*N): z = -Fuenfeck1[i] Fuenfeck2.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,5*N): z = Fuenfeck2[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, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fünfecke 2") obj.Message(c4d.MSG_UPDATE) return obj # Fünfecke 3 *************************************************************** def CreateSplineObjectF3(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)) dta= a/N # Unterteilung Kante a dtb= b/N # Unterteilung Kante b zz = 0 # Zähler Punkte # Fünfeckdaten erzeugen for i in range(0,5*N): z = Drehung(Fuenfeck1[i], -90) + complex(0.5*b + h, 0) Fuenfeck3.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,5*N): z = Fuenfeck3[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, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fünfecke 3") obj.Message(c4d.MSG_UPDATE) return obj # Fünfecke 4 *************************************************************** def CreateSplineObjectF4(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)) dta= a/N # Unterteilung Kante a dtb= b/N # Unterteilung Kante b zz = 0 # Zähler Punkte # Fünfeckdaten erzeugen for i in range(0,5*N): z = Drehung(Fuenfeck1[i], 90) + complex(-0.5*b - h, 0) Fuenfeck4.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,5*N): z = Fuenfeck4[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, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fünfecke 4") obj.Message(c4d.MSG_UPDATE) return obj def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectF1() slinobj2 = CreateSplineObjectF2() slinobj3 = CreateSplineObjectF3() slinobj4 = CreateSplineObjectF4() 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()