""" Kachelung 3 10.09.2015 """ import c4d import math # Variablen und Konstanten N = 32 # Anzahl Punkte pro Kante r = 1.0 # Kantenlaenge ri = 0.5*r*(1 + math.sqrt(2.0)) # Inkreisradius Achteck Abstand_x = 2*ri + r Abstand_y = 2*ri + r Versatz_x = ri + 0.5*r Versatz_y = ri + 0.5*r NS = 5 # Anzahl Wiederholungen in eine Richtung Faktor = 1000 # Skalierungsfaktor Achteck = [] Quadrat = [] #Inversion = True Inversion = False def Invers(z): return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 3") 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) # Achtecke 1 ************************************************** def CreateSplineObjectA1(): # Splineobjekte erzeugen obj1 = c4d.BaseObject(c4d.Ospline) obj1.ResizeObject(N*8*(2*NS+1)*(2*NS+1)) dt= r/N # Unterteilung Kante zz = 0 # Zähler Punkte # Achteckdaten erzeugen for i in range(0,N): z = complex(-0.5 * r + i * dt, -ri) Achteck.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -45) + complex(0.5*r, -ri) Achteck.append(z) for i in range(0,N): z = complex(ri, -0.5 * r + i * dt) Achteck.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -135) + complex(ri, 0.5 * r) Achteck.append(z) for i in range(0,N): z = complex(0.5 * r - i * dt, ri) Achteck.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 135) + complex(-0.5 * r, ri) Achteck.append(z) for i in range(0,N): z = complex(-ri, 0.5 * r - i * dt) Achteck.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 45) + complex(-ri, -0.5 * r) Achteck.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): x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,8*N): z = Achteck[i] + complex(x0, y0) if Inversion: z = Invers(z) obj1.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj1.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)) for i in range(0, (2*NS+1)*(2*NS+1)): obj1.SetSegment(i, 8*N, True) obj1[c4d.SPLINEOBJECT_CLOSED] = True obj1.SetName("Achtecke 1") obj1.Message(c4d.MSG_UPDATE) return obj1 # Achtecke 2 *********************************************** def CreateSplineObjectA2(): # Splineobjekte erzeugen obj2 = c4d.BaseObject(c4d.Ospline) obj2.ResizeObject(N*8*(2*NS)*(2*NS)) dt= r/N # Unterteilung Kante zz = 0 # Zähler Punkte for k in range(0,2*NS): y0 = -Abstand_y*NS + k*Abstand_y + ri + 0.5*r for j in range(0,2*NS): x0 = -Abstand_x*NS + j*Abstand_x + ri + 0.5*r for i in range(0,8*N): z = Achteck[i] + complex(x0, y0) if Inversion: z = Invers(z) obj2.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj2.MakeVariableTag(c4d.Tsegment, (2*NS)*(2*NS)) for i in range(0, (2*NS)*(2*NS)): obj2.SetSegment(i, 8*N, True) obj2[c4d.SPLINEOBJECT_CLOSED] = True obj2.SetName("Achtecke 2") obj2.Message(c4d.MSG_UPDATE) return obj2 # Quadrate 1 *********************************************** def CreateSplineObjectQ1(): # Splineobjekte erzeugen obj3 = c4d.BaseObject(c4d.Ospline) obj3.ResizeObject(N*4*(2*NS+1)*(2*NS)) 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) for k in range(0,2*NS): y0 = -2*(0.5*r+ri)*(NS) + k*Abstand_y +ri + 0.5*r for j in range(0,2*NS+1): x0 = -2*(0.5*r+ri)*(NS) + j*Abstand_x for i in range(0,4*N): z = Quadrat[i] + complex(x0, y0) if Inversion: z = Invers(z) obj3.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj3.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS)) for i in range(0, (2*NS+1)*(2*NS)): obj3.SetSegment(i, 4*N, True) obj3[c4d.SPLINEOBJECT_CLOSED] = True obj3.SetName("Quadrate 1") obj3.Message(c4d.MSG_UPDATE) return obj3 # Quadrate 2 ************************************************ def CreateSplineObjectQ2(): # Splineobjekte erzeugen obj4 = c4d.BaseObject(c4d.Ospline) obj4.ResizeObject(N*4*(2*NS+1)*(2*NS)) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte for k in range(0,2*NS+1): y0 = -2*(0.5*r+ri)*(NS) + k*Abstand_y for j in range(0,2*NS): x0 = -2*(0.5*r+ri)*(NS) + j*Abstand_x + ri + 0.5*r for i in range(0,4*N): z = Quadrat[i] + complex(x0, y0) if Inversion: z = Invers(z) obj4.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj4.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS)) for i in range(0, (2*NS+1)*(2*NS)): obj4.SetSegment(i, 4*N, True) obj4[c4d.SPLINEOBJECT_CLOSED] = True obj4.SetName("Quadrate 2") obj4.Message(c4d.MSG_UPDATE) return obj4 def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectA1() slinobj2 = CreateSplineObjectA2() slinobj3 = CreateSplineObjectQ1() slinobj4 = CreateSplineObjectQ2() 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()