""" Kachelung 48 12.02.2014 """ import c4d import math # Variablen und Konstanten N = 1 # Anzahl Punkte pro Kante r = 1.0 # Kantenlaenge ris = 0.5*r/math.tan(math.pi/7.0) # Inkreisradius Siebeneck rus = 0.5*r/math.sin(math.pi/7.0) # Umkreisradius Siebeneck h = 0.5 * math.sqrt(3.0) * r # Hoehe Dreieck ria = r/(2.0*math.tan(math.pi/42.0)) # Inkreisradius 42-eck rua = r/(2*math.sin(math.pi/42.0)) # Umkreisradius 42-eck a = r*math.cos(4*math.pi/21.0) # Daten Raute 1 b = r*math.sin(4*math.pi/21.0) # Daten Raute 1 c = r*math.cos(3*math.pi/14.0) # Daten Raute 2 d = r*math.sin(3*math.pi/14.0) # Daten Raute 2 e = r*math.cos(19*math.pi/42.0) # Daten Raute 3 f = r*math.sin(19*math.pi/42.0) # Daten Raute 3 Abstand_x = 2*(rua + a) Abstand_y = (rua + a)* math.sqrt(3.0) Versatz_x = rua + a NS = 5 # Anzahl Wiederholungen in eine Richtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Zweiundvierzigeck = [] Siebeneck = [] Raute1 = [] Raute2 = [] Raute3 = [] Dreieck1 = [] Dreieck2 = [] Dreieck3 = [] #Inversion = True Inversion = False def Invers(z): return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 48") 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) # Dreiecke 3 ****************************************************************************** def CreateSplineObjectD3(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*3*(2*NS+1)*(2*NS+1)*6) dt= r/N zz = 0 # Zaehler Punkte # Dreiecksdaten erzeugen for i in range(0,N): z = complex( -0.5 *r + i * dt, 0) Dreieck3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) + complex(0.5*r, 0) Dreieck3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0, h) Dreieck3.append(z) # Dreieck verschieben for i in range(0,3*N): Dreieck3[i] = Dreieck3[i] + complex(rua + a, b + ris + rus) # Dreieck duplizieren und drehen for i in range(0,3*N): z = Drehung(Dreieck3[i], -60) Dreieck3.append(z) for i in range(0,3*N): z = Drehung(Dreieck3[i], 60) Dreieck3.append(z) # Dreieck duplizieren und spiegeln for i in range(0,3*N): z = complex(Dreieck3[i].real, -Dreieck3[i].imag) Dreieck3.append(z) # Dreieck duplizieren und drehen for i in range(9*N,12*N): z = Drehung(Dreieck3[i], -60) Dreieck3.append(z) for i in range(9*N,12*N): z = Drehung(Dreieck3[i], 60) Dreieck3.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*6): z = Dreieck3[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, 3*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Dreiecke 3") 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)*2) dt= r/N zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -570/7.0) + complex(-e, 0) Raute3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 570/7.0) + complex(0, f) Raute3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 690/7.0) + complex(e, 0) Raute3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -690/7.0) + complex(0, -f) Raute3.append(z) # Raute verschieben for i in range(0,4*N): Raute3[i] = Raute3[i] + complex(ria + h + 2*c + e, 0) # Raute drehen for i in range(0,4*N): Raute3[i] = Drehung(Raute3[i], -30) # Raute duplizieren und drehen for i in range(0,4*N): z = Drehung(Raute3[i], 60) 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*2): 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)*2) for i in range(0, (2*NS+1)*(2*NS+1)*2): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Rauten 3") obj.Message(c4d.MSG_UPDATE) return obj # Dreiecke 2 ****************************************************************************** def CreateSplineObjectD2(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*3*(2*NS+1)*(2*NS+1)*4) dt= r/N zz = 0 # Zaehler Punkte # Dreiecksdaten erzeugen for i in range(0,N): z = complex(i * dt, 0) Dreieck2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) + complex(r, 0) Dreieck2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0.5*r, h) Dreieck2.append(z) # Dreieck drehen und verschieben for i in range(0,3*N): Dreieck2[i] = Drehung(Dreieck2[i], 270/7.0) + complex(ria + h + c, d) # Dreieck spiegeln for i in range(0,3*N): z = complex(Dreieck2[i].real, -Dreieck2[i].imag) Dreieck2.append(z) # Dreiecke drehen for i in range(0,3*N*2): Dreieck2[i] = Drehung(Dreieck2[i], -30) # Dreiecke duplizieren und drehen for i in range(0,3*N*2): z = Drehung(Dreieck2[i], 60) Dreieck2.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*4): z = Dreieck2[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, 3*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Dreiecke 2") 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)*2) dt= r/N zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 270/7.0) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -270/7.0) + complex(c, -d) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -990/7.0) + complex(2*c, 0) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 990/7.0) + complex(c, d) Raute2.append(z) # Raute verschieben for i in range(0,4*N): Raute2[i] = Raute2[i] + complex(ria + h, 0) # Raute drehen for i in range(0,4*N): Raute2[i] = Drehung(Raute2[i], -30) # Raute duplizieren und drehen for i in range(0,4*N): z = Drehung(Raute2[i], 60) 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*2): 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)*2) for i in range(0, (2*NS+1)*(2*NS+1)*2): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Rauten 2") obj.Message(c4d.MSG_UPDATE) return obj # Siebenecke **************************************************************************** def CreateSplineObjectS(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*7*(2*NS+1)*(2*NS+1)*6) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Siebeneckdaten erzeugen for i in range(0,N): z = complex(-0.5 * r + i * dt, -ris) Siebeneck.append(z) for k in range(1,7): for j in range(0,N): z = Drehung(Siebeneck[j], -360*k/7.0) Siebeneck.append(z) # Siebeneck verschieben for i in range(0,7*N): Siebeneck[i] = Siebeneck[i] + complex(0, ria + ris) # Siebeneck drehen for i in range(0,7*N): Siebeneck[i] = Drehung(Siebeneck[i], 360*2/42.0) # Siebeneck duplizieren und drehen for i in range(0,7*N): z = Drehung(Siebeneck[i], 360*3/42.0) Siebeneck.append(z) for i in range(0,7*N): z = Drehung(Siebeneck[i], 360*7/42.0) Siebeneck.append(z) # Siebenecke spiegeln for i in range(0,7*N*3): z = complex(Siebeneck[i].real, -Siebeneck[i].imag) Siebeneck.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,7*N*6): z = Siebeneck[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, 7*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Siebenecke") 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)*15) dt= r/N zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 240/7.0) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -240/7.0) + complex(a, -b) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -1020/7.0) + complex(2*a, 0) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 1020/7.0) + complex(a, b) Raute1.append(z) # Raute verschieben for i in range(0,4*N): Raute1[i] = Raute1[i] + complex(rua, 0) # Raute duplizieren und drehen for i in range(0,4*N): z = Drehung(Raute1[i], -3*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], -4*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], -7*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], -10*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], 3*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], 4*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], 7*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], 10*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], -11*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], -17*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], -18*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], -24*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], -25*360/42.0) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], -31*360/42.0) 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*15): 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)*15) for i in range(0, (2*NS+1)*(2*NS+1)*15): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Rauten 1") obj.Message(c4d.MSG_UPDATE) return obj # Dreiecke 1 ****************************************************************************** def CreateSplineObjectD1(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*3*(2*NS+1)*(2*NS+1)*30) dt= r/N zz = 0 # Zaehler Punkte # Dreiecksdaten erzeugen for i in range(0,N): z = complex( -0.5 *r + i * dt, ria) Dreieck1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) + complex(0.5*r, ria) Dreieck1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0, ria + h) Dreieck1.append(z) # Dreieck duplizieren und drehen for i in range(0,3*N): z = Drehung(Dreieck1[i], 360/42.0) Dreieck1.append(z) for i in range(0,3*N): z = Drehung(Dreieck1[i], -360/42.0) Dreieck1.append(z) for i in range(0,3*N): z = Drehung(Dreieck1[i], 3*360/42.0) Dreieck1.append(z) for i in range(0,3*N): z = Drehung(Dreieck1[i], 4*360/42.0) Dreieck1.append(z) # Dreiecke duplizieren und drehen for k in range(1,6): for i in range(0,3*N*5): z = Drehung(Dreieck1[i], -60*k) Dreieck1.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*30): z = Dreieck1[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)*30) for i in range(0, (2*NS+1)*(2*NS+1)*30): obj.SetSegment(i, 3*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Dreiecke 1") obj.Message(c4d.MSG_UPDATE) return obj # Zweiundvierzigecke **************************************************************************** def CreateSplineObjectA(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*42*(2*NS+1)*(2*NS+1)) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Zweiundvierzigeckdaten erzeugen for i in range(0,N): z = complex(-0.5 * r + i * dt, -ria ) Zweiundvierzigeck.append(z) for k in range(1,42): for j in range(0,N): z = Drehung(Zweiundvierzigeck[j], -360*k/42.0) Zweiundvierzigeck.append(z) y0=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,42*N): z = Zweiundvierzigeck[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, 42*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Zweiundvierzigecke") obj.Message(c4d.MSG_UPDATE) return obj def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectA() slinobj2 = CreateSplineObjectS() slinobj3 = CreateSplineObjectD1() slinobj4 = CreateSplineObjectR1() slinobj5 = CreateSplineObjectR2() slinobj6 = CreateSplineObjectD2() slinobj7 = CreateSplineObjectR3() slinobj8 = CreateSplineObjectD3() doc.InsertObject(nullobj, None, None, True) doc.InsertObject(slinobj7, nullobj, None, True) doc.InsertObject(slinobj6, nullobj, None, True) doc.InsertObject(slinobj5, nullobj, None, True) doc.InsertObject(slinobj3, nullobj, None, True) doc.InsertObject(slinobj4, nullobj, None, True) doc.InsertObject(slinobj2, nullobj, None, True) doc.InsertObject(slinobj1, nullobj, None, True) doc.InsertObject(slinobj8, nullobj, None, True) c4d.EventAdd() if __name__=='__main__': main()