""" Kachelung 69 02.01.2016 """ import c4d import math # Variablen und Konstanten N = 5 # Anzahl Punkte pro Kante r = 1.0 # Kantenlaenge h = 0.5 * math.sqrt(3.0) * r # Hoehe Dreieck riz = r/(2.0*math.tan(math.pi/20.0)) # Inkreisradius Zwanzigeck ruz = r/(2*math.sin(math.pi/20.0)) # Umkreisradius Zwanzigeck ri = 0.1*r*math.sqrt(25 + 10*math.sqrt(5.0)) # Inkreisradius Fuenfeck ru = 0.1*r*math.sqrt(50 + 10*math.sqrt(5.0)) # Umkreisradius Fuenfeck h5 = 0.5*r*math.sqrt(5 + 2*math.sqrt(5.0)) # Hoehe Fuenfeck w1 = 18 # kleiner Winkel der Raute 1 a = r*math.cos(w1*math.pi/360.0) # Daten Raute 1 b = r*math.sin(w1*math.pi/360.0) # Daten Raute 1 w2 = 72 # kleiner Winkel der Raute 2 c = r*math.cos(w2*math.pi/360.0) # Daten Raute 2 d = r*math.sin(w2*math.pi/360.0) # Daten Raute 2 Abstand_x = 2 * (2*riz + r) * math.cos(math.pi/4.0) Abstand_y = (2*riz + r) * math.sin(math.pi/4.0) Versatz_x = 0.5 * Abstand_x NS = 3 # Anzahl Wiederholungen in eine Rchtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Zwanzigeck = [] Fuenfeck = [] Raute1 = [] Raute2 = [] Quadrat = [] #Inversion = True Inversion = False def Invers(z): return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 69") 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) # Quadrate ************************************************************************** def CreateSplineObjectQ(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*10) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Quadratdaten erzeugen for i in range(0,N): z = complex(-0.5 * r + i * dt, -0.5 * r) Quadrat.append(z) for i in range(0,N): z = complex(0.5 * r, -0.5 * r + i * dt) Quadrat.append(z) for i in range(0,N): z = complex(0.5 * r - i * dt, 0.5 * r) Quadrat.append(z) for i in range(0,N): z = complex(-0.5 * r, 0.5 * r - i * dt) Quadrat.append(z) # Quadrat verschieben for i in range(0,4*N): Quadrat[i] = Quadrat[i] + complex(0, riz + 0.5*r) # Quadrat drehen for i in range(0,4*N): Quadrat[i] = Drehung(Quadrat[i], 9) # Quadrat duplizieren und drehen for i in range(0,4*N): z = Drehung(Quadrat[i], 36) Quadrat.append(z) for i in range(0,4*N): z = Drehung(Quadrat[i], 72) Quadrat.append(z) for i in range(0,4*N): z = Drehung(Quadrat[i], 90) Quadrat.append(z) for i in range(0,4*N): z = Drehung(Quadrat[i], 126) Quadrat.append(z) for i in range(0,4*N): z = Drehung(Quadrat[i], 162) Quadrat.append(z) for i in range(0,4*N): z = Drehung(Quadrat[i], 180) Quadrat.append(z) for i in range(0,4*N): z = Drehung(Quadrat[i], 252) Quadrat.append(z) for i in range(0,4*N): z = Drehung(Quadrat[i], 270) Quadrat.append(z) for i in range(0,4*N): z = Drehung(Quadrat[i], 342) Quadrat.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*10): z = Quadrat[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)*10) for i in range(0, (2*NS+1)*(2*NS+1)*10): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Quadrate") obj.Message(c4d.MSG_UPDATE) return obj # Zwanzigecke **************************************************************************** def CreateSplineObjectZ(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*20*(2*NS+1)*(2*NS+1)) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Zwanzigeckdaten erzeugen for i in range(0,N): z = complex(-0.5 * r + i * dt, -riz) Zwanzigeck.append(z) for k in range(1,20): for j in range(0,N): z = Drehung(Zwanzigeck[j], -360*k/20.0) Zwanzigeck.append(z) # Zwanzigeck drehen for i in range(0, 20*N): Zwanzigeck[i] = Drehung(Zwanzigeck[i], 360/40.0) 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,20*N): z = Zwanzigeck[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, 20*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Zwanzigecke") obj.Message(c4d.MSG_UPDATE) return obj # Fuenfecke ************************************************************** def CreateSplineObjectF(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)*4) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Fuenfeckdaten erzeugen for i in range(0,N): z = complex(-0.5 * r + i * dt, ri) Fuenfeck.append(z) for k in range(1,5): for j in range(0,N): z = Drehung(Fuenfeck[j], 72*k) Fuenfeck.append(z) # Fuenfeck verschieben for i in range(0,5*N): Fuenfeck[i] = Fuenfeck[i] + complex(0, -riz - ri) # Fuenfeck drehen for i in range(0,5*N): Fuenfeck[i] = Drehung(Fuenfeck[i], -27) # Fünfeck duplizieren und drehen for i in range(0,5*N): z = Drehung(Fuenfeck[i], -36) Fuenfeck.append(z) # Fuenfecke spiegeln for i in range(0,5*N*2): z = complex(Fuenfeck[i].real, -Fuenfeck[i].imag) Fuenfeck.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*4): z = Fuenfeck[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)*4) for i in range(0, (2*NS+1)*(2*NS+1)*4): obj.SetSegment(i, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fuenfecke") obj.Message(c4d.MSG_UPDATE) return obj # Rauten 1 *************************************************************************************** def CreateSplineObjectR1(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*4) dt= r/N zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -w1/2.0) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, w1/2.0) + complex(a, b) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 180 - w1/2.0) + complex(2*a, 0) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -180 + w1/2.0) + complex(a, -b) Raute1.append(z) # Raute verschieben for i in range(0,4*N): Raute1[i] = Raute1[i] + complex(ruz, 0) # Rauten duplizieren und drehen for k in range(1,4): for i in range(0,4*N): z = Drehung( Raute1[i], -90*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*4): 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)*4) for i in range(0, (2*NS+1)*(2*NS+1)*4): 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(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*4) dt= r/N zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -w2/2.0) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, w2/2.0) + complex(c, d) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 180 - w2/2.0) + complex(2*c, 0) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -180 + w2/2.0) + complex(c, -d) Raute2.append(z) # Raute drehen for i in range(0,4*N): Raute2[i] = Drehung(Raute2[i], 54) # Rauten verschieben for i in range(0,4*N): Raute2[i] = Raute2[i] + complex(riz + r, 0.5*r) # Raute drehen for i in range(0,4*N): Raute2[i] = Drehung(Raute2[i], -9) # Raute spiegeln for i in range(0,4*N): z = + complex(Raute2[i].real, -Raute2[i].imag) Raute2.append(z) # Rauten spiegeln for i in range(0,4*N*2): z = + complex(-Raute2[i].real, Raute2[i].imag) 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*4): 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)*4) for i in range(0, (2*NS+1)*(2*NS+1)*4): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Rauten 2") obj.Message(c4d.MSG_UPDATE) return obj def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectZ() slinobj2 = CreateSplineObjectF() slinobj3 = CreateSplineObjectQ() slinobj4 = CreateSplineObjectR1() slinobj5 = CreateSplineObjectR2() doc.InsertObject(nullobj, None, None, True) doc.InsertObject(slinobj5, nullobj, 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()