""" Kachelung 45 10.09.2015 """ import c4d import math # Variablen und Konstanten N = 5 # Anzahl Punkte pro Kante r = 1.0 # Kantenlaenge riz = 0.5*r*math.sqrt(5.0 + 2*math.sqrt(5.0)) # Inkreisradius Zehneck ruz = 0.5*r*(1.0 + math.sqrt(5.0)) # Umkreisradius Zehneck 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 h = 0.5*r*math.sqrt(5 + 2*math.sqrt(5.0)) # Hoehe Fuenfeck a = r*math.sqrt(10.0 + 2*math.sqrt(5.0))/4.0 b = r*(math.sqrt(5.0) - 1)/4.0 c = r + 2*b Abstand_x = 2*ruz + r Abstand_y = 2*riz + a Versatz_x = ruz + r + b NS = 7 # Anzahl Sechsecke von der Mitte in einer Richtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Zehneck = [] Fuenfeck = [] Trapez = [] #Inversion = True Inversion = False def Invers(z): return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 45") 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) # Trapeze ************************************************************** def CreateSplineObjectT(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*2) dt= r/N # Unterteilung Kante dtc = c/N zz = 0 # Zaehler Punkte # Trapezdaten erzeugen for i in range(0,N): z = complex(-0.5 * r + i * dt, -riz) Trapez.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 72) + complex(0.5*r, -riz) Trapez.append(z) for i in range(0,N): z = complex(0.5*r + b - i * dtc, -riz - a) Trapez.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -72) + complex(-0.5*r - b, -riz - a) Trapez.append(z) # Trapez drehen for i in range(0,4*N): Trapez[i] = Drehung(Trapez[i], 36) # Trapez duplizieren und drehen for j in range(0,4*N): z = Drehung(Trapez[j], -180) Trapez.append(z) for k in range(0,2*NS+1): x1 = -Versatz_x*NS + k*Versatz_x 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,4*N*2): z = Trapez[i] + complex(x0 + x1, 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("Trapeze") 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 duplizieren und drehen for k in range(1,4): for j in range(0,5*N): z = Drehung(Fuenfeck[j], -36*k) Fuenfeck.append(z) for k in range(0,2*NS+1): x1 = -Versatz_x*NS + k*Versatz_x 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,5*N*4): z = Fuenfeck[i] + complex(x0 + x1, 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 # Zehnecke ********************************************************************** def CreateSplineObjectZ(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*10*(2*NS+1)*(2*NS+1)) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Sechseckdaten erzeugen for i in range(0,N): z = complex( -0.5 * r + i * dt, riz) Zehneck.append(z) for k in range(1,10): for j in range(0,N): z = Drehung(Zehneck[j], 36*k) Zehneck.append(z) for k in range(0,2*NS+1): x1 = -Versatz_x*NS + k*Versatz_x 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,10*N): z = Zehneck[i] + complex(x0 + x1, 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, 10*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Zehnecke") obj.Message(c4d.MSG_UPDATE) return obj def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectZ() slinobj2 = CreateSplineObjectF() slinobj3 = CreateSplineObjectT() 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()