""" Kachelung 42 12.10.2015 """ import c4d import math # Variablen und Konstanten N = 5 # Anzahl Punkte pro Kante r = 1.0 # Kantenlaenge ri = 0.5*r*(2 + math.sqrt(3.0)) # Inkreisradius Zwoelfeck h = 0.5 * math.sqrt(3.0) *r # Hoehe Dreieck Abstand_x = r + h Abstand_y = r + h Versatz_x = 0.5*r Versatz_y = 0.5*r NS = 5 # Anzahl Wiederholungen in eine Richtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Dreieck = [] Quadrat = [] Raute = [] #Inversion = True Inversion = False def Invers(z): return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 42") 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)) 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+1): x1 = -Versatz_x*NS + k*Versatz_x y1 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): x0 = -Abstand_x*NS + j*Abstand_x y0 = -Versatz_y*NS + j*Versatz_y for i in range(0,4*N): z = Quadrat[i] + complex(x0, y0) + complex(x1, y1) 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("Quadrate") obj.Message(c4d.MSG_UPDATE) return obj # Rauten ************************************************************************** def CreateSplineObjectR(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -30) + complex(0.5*r, 0.5*r) Raute.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -60) + complex(0.5*r + h, r) Raute.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 150) + complex(r + h, r + h) Raute.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(r, 0.5*r + h) Raute.append(z) for k in range(0,2*NS+1): x1 = -Versatz_x*NS + k*Versatz_x y1 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): x0 = -Abstand_x*NS + j*Abstand_x y0 = -Versatz_y*NS + j*Versatz_y for i in range(0,4*N): z = Raute[i] + complex(x0, y0) + complex(x1, y1) 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") obj.Message(c4d.MSG_UPDATE) return obj # Dreiecke ****************************************************************************** def CreateSplineObjectD(): 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(0.5 * r, -0.5 *r + i * dt) Dreieck.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 30) + complex(0.5*r, 0.5*r) Dreieck.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 150) + complex(0.5*r + h, 0) Dreieck.append(z) # Dreiecke duplizieren und drehen for k in range(1,4): for j in range(0,3*N): z = Drehung(Dreieck[j], -90*k) Dreieck.append(z) for k in range(0,2*NS+1): x1 = -Versatz_x*NS + k*Versatz_x y1 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): x0 = -Abstand_x*NS + j*Abstand_x y0 = -Versatz_y*NS + j*Versatz_y for i in range(0,12*N): z = Dreieck[i] + complex(x0, y0) + complex(x1, y1) 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") obj.Message(c4d.MSG_UPDATE) return obj def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectQ() slinobj2 = CreateSplineObjectR() slinobj3 = CreateSplineObjectD() doc.InsertObject(nullobj, None, 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()