""" Kachelung 22 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 h = 0.25*r*math.sqrt(10.0 + 2*math.sqrt(5.0)) # Hoehe Trapez d2 = 0.5*r*math.sqrt(10.0 + 2*math.sqrt(5.0)) # Diagonale 2 a = r*math.sqrt(1.0 - (10.0 + 2*math.sqrt(5.0))/16.0) b = r - 0.5*r*(math.sqrt(5.0) - 1) # Oberseite Trapez Abstand_x = 2*riz Abstand_y = 2*ruz - a Versatz_x = 0.5*d2 NS = 3 # Anzahl Sechsecke von der Mitte in einer Richtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Zehneck = [] Trapez1 = [] Trapez2 = [] #Inversion = True Inversion = False def Invers(z): return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 22") 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 1 ******************************************************************** def CreateSplineObjectT1(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*NS*2) dt = r/N dtb= b/N zz = 0 # Zaehler Punkte # Trapezdaten erzeugen for i in range(0,N): z = complex(riz , 0.5*r - i * dt) Trapez1.append(z) for i in range(0,N): z = complex(i * dt , 0) z = Drehung(z, -18) + complex(riz, -0.5*r) Trapez1.append(z) for i in range(0,N): z = complex(riz + h, -0.5*b + i * dtb,) Trapez1.append(z) for i in range(0,N): z = complex(i * dt , 0) z = Drehung(z, -162) + complex(riz + h, 0.5*b) Trapez1.append(z) # Trapez drehen und duplizieren for i in range(0,4*N): Trapez1[i] = Drehung(Trapez1[i], -36) for i in range(0,4*N): z = Drehung(Trapez1[i], 72) Trapez1.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: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,4*N*2): z = Trapez1[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)*NS*2) for i in range(0, (2*NS+1)*NS*2): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Trapeze 1") obj.Message(c4d.MSG_UPDATE) return obj # Trapeze 2 ******************************************************************** def CreateSplineObjectT2(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(NS+1)*2) dt = r/N dtb= b/N zz = 0 # Zaehler Punkte # Trapezdaten aus Trapez 1 erzeugen (spiegeln) for i in range(0,8*N): z = complex(-Trapez1[i].real, Trapez1[i].imag) Trapez2.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: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x for i in range(0,4*N*2): z = Trapez2[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)*(NS+1)*2) for i in range(0, (2*NS+1)*(NS+1)*2): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Trapeze 2") obj.Message(c4d.MSG_UPDATE) return obj # Zehnecke ********************************************************************** def CreateSplineObjectZ(): # Splineobjekte erzeugen obj2 = c4d.BaseObject(c4d.Ospline) obj2.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(riz, -0.5 * r + i * dt) 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): 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,10*N): z = Zehneck[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+1)*(2*NS+1)) for i in range(0, (2*NS+1)*(2*NS+1)): obj2.SetSegment(i, 10*N, True) obj2[c4d.SPLINEOBJECT_CLOSED] = True obj2.SetName("Zehnecke") obj2.Message(c4d.MSG_UPDATE) return obj2 def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectZ() slinobj2 = CreateSplineObjectT1() slinobj3 = CreateSplineObjectT2() 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()