""" Kachelung 62 27.11.2015 """ import c4d import math # Variablen und Konstanten N = 5 # Anzahl Punkte pro Kante r = 1.0 # Kantenlaenge w1 = 36 # kleiner Winkel der Raute 1, 2 und 4 a = r*math.cos(w1*math.pi/360.0) # Daten Raute 1 b = r*math.sin(w1*math.pi/360.0) # Daten Raute 1 w3 = 72 # kleiner Winkel der Raute 3 und 5 c = r*math.cos(w3*math.pi/360.0) # Daten Raute 3 d = r*math.sin(w3*math.pi/360.0) # Daten Raute 3 Abstand_x = 2*(r + 2*c + b) Abstand_y = 3*a + 2*d Versatz_x = r + 2*c + b NS = 5 # Anzahl Wiederholungen in eine Rchtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Raute1 = [] Raute2 = [] Raute3 = [] Raute4 = [] Raute5 = [] #Inversion = True Inversion = False def Invers(z): return 1/(z + complex(0.001, 0.001)) def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 62") 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) # Rauten 1 *************************************************************************************** def CreateSplineObjectR1(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*5) 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 drehen for i in range(0,4*N): Raute1[i] = Drehung(Raute1[i], -w1/2.0) # Rauten duplizieren und drehen for k in range(1,5): for i in range(0,4*N): z = Drehung( Raute1[i], -72*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*5): 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)*5) for i in range(0, (2*NS+1)*(2*NS+1)*5): 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)*5) 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) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, w1/2.0) + complex(a, b) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 180 - w1/2.0) + complex(2*a, 0) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -180 + w1/2.0) + complex(a, -b) Raute2.append(z) # Raute drehen for i in range(0,4*N): Raute2[i] = Drehung(Raute2[i], w1/2.0) # Rauten duplizieren und drehen for k in range(1,5): for i in range(0,4*N): z = Drehung( Raute2[i], -72*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*5): 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)*5) for i in range(0, (2*NS+1)*(2*NS+1)*5): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Rauten 2") obj.Message(c4d.MSG_UPDATE) return obj # Rauten 3 *************************************************************************************** def CreateSplineObjectR3(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*10) dt= r/N zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -w3/2.0) Raute3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, w3/2.0) + complex(c, d) Raute3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 180 - w3/2.0) + complex(2*c, 0) Raute3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -180 + w3/2.0) + complex(c, -d) Raute3.append(z) # Raute verschieben for i in range(0,4*N): Raute3[i] = Raute3[i] + complex(r, 0) # Rauten duplizieren und drehen for k in range(1,10): for i in range(0,4*N): z = Drehung( Raute3[i], -36*k) Raute3.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 = Raute3[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("Rauten 3") obj.Message(c4d.MSG_UPDATE) return obj # Rauten 4 *************************************************************************************** def CreateSplineObjectR4(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)) 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) Raute4.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, w1/2.0) + complex(a, b) Raute4.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 180 - w1/2.0) + complex(2*a, 0) Raute4.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -180 + w1/2.0) + complex(a, -b) Raute4.append(z) # Raute verschieben und drehen for i in range(0,4*N): Raute4[i] = Raute4[i] - complex(a, 0) for i in range(0,4*N): Raute4[i] = Drehung(Raute4[i], 90) for i in range(0,4*N): Raute4[i] = Raute4[i] + complex(r + 2*c + b, 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,4*N*1): z = Raute4[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, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Rauten 4") obj.Message(c4d.MSG_UPDATE) return obj # Rauten 5 *************************************************************************************** def CreateSplineObjectR5(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*8) dt= r/N zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -w3/2.0) Raute5.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, w3/2.0) + complex(c, d) Raute5.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 180 - w3/2.0) + complex(2*c, 0) Raute5.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -180 + w3/2.0) + complex(c, -d) Raute5.append(z) # Raute verschieben for i in range(0,4*N): Raute5[i] = Raute5[i] + complex(-c, 2*a + d) # Rauten duplizieren und drehen for k in range(1,6): for i in range(0,4*N): z = Drehung( Raute5[i], 36*k) Raute5.append(z) for i in range(0,4*N): z = Drehung( Raute5[i], -72) Raute5.append(z) for i in range(0,4*N): z = Drehung( Raute5[i], -108) Raute5.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*8): z = Raute5[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)*8) for i in range(0, (2*NS+1)*(2*NS+1)*8): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Rauten 5") obj.Message(c4d.MSG_UPDATE) return obj def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectR1() slinobj2 = CreateSplineObjectR2() slinobj3 = CreateSplineObjectR3() slinobj4 = CreateSplineObjectR4() slinobj5 = CreateSplineObjectR5() 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()