""" Gyroid Surface 08.12.2020 """ import c4d import math # Variablen und Konstanten objektname = 'Gyroid Surface' a = 4*math.pi delta = 0.03 xMin = -a # Bereich x xMax = a # Bereich x yMin = -a # Bereich y yMax = a # Bereich y zMin = -a # Bereich z zMax = a # Bereich z Nx = 250 # Anzahl Punkte x Ny = 250 # Anzahl Punkte y Nz = 250 # Anzahl Punkte z Punkte = [] Faktor = 100/math.pi # Skalierungsfaktor def PunkteErzeugen(): # Segmentbreiten berechnen dx=(xMax-xMin)/Nx dy=(yMax-yMin)/Ny dz=(zMax-zMin)/Nz # Halbe Breite W dw=0.5*dx # Punkte erzeugen for i in xrange(0,Nx+1): for j in xrange(0,Ny+1): for k in xrange(0,Nz+1): # Berechnung der Punkte x=xMin+i*dx y=yMin+j*dy z=zMin+k*dz func=math.cos(x)*math.sin(y)+math.cos(y)*math.sin(z)+math.cos(z)*math.sin(x) # Abstand berechnen r=math.sqrt(x*x+y*y+z*z) if (abs(func) < delta) and (r < a): Punkte.append(c4d.Vector(x, y, z)) return def CreatePolygonObject(): # Polygonobjekt erzeugen obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject(len(Punkte)*8, len(Punkte)*6) obj.SetName(objektname) # Variablen zz=0 # Zaehler fuer Punkte zzz=0 # Zaeher fuer Polygone # Segmentbreiten berechnen dx=(xMax-xMin)/Nx dy=(yMax-yMin)/Ny dz=(zMax-zMin)/Nz # Halbe Breite W dw=0.5*dx print(Punkte[5]) print(len(Punkte)) # Punkte erzeugen for i in range(0,len(Punkte)): # Koordinaten des Punktes x=Punkte[i].x y=Punkte[i].y z=Punkte[i].z # Punktanfang (erster Punkt des Wuerfels) pa=zz # Punkte fuer Wuerfel speichern obj.SetPoint(zz, c4d.Vector((x-dw)*Faktor,(z-dw)*Faktor,(y-dw)*Faktor)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x+dw)*Faktor,(z-dw)*Faktor,(y-dw)*Faktor)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x+dw)*Faktor,(z-dw)*Faktor,(y+dw)*Faktor)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x-dw)*Faktor,(z-dw)*Faktor,(y+dw)*Faktor)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x-dw)*Faktor,(z+dw)*Faktor,(y-dw)*Faktor)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x+dw)*Faktor,(z+dw)*Faktor,(y-dw)*Faktor)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x+dw)*Faktor,(z+dw)*Faktor,(y+dw)*Faktor)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x-dw)*Faktor,(z+dw)*Faktor,(y+dw)*Faktor)) zz=zz+1 # Polygone des Wuerfels setzen obj.SetPolygon(zzz, c4d.CPolygon(pa,pa+1,pa+2,pa+3)) zzz=zzz+1 obj.SetPolygon(zzz, c4d.CPolygon(pa+4,pa+5,pa+6,pa+7)) zzz=zzz+1 obj.SetPolygon(zzz, c4d.CPolygon(pa,pa+1,pa+5,pa+4)) zzz=zzz+1 obj.SetPolygon(zzz, c4d.CPolygon(pa+1,pa+2,pa+6,pa+5)) zzz=zzz+1 obj.SetPolygon(zzz, c4d.CPolygon(pa+2,pa+3,pa+7,pa+6)) zzz=zzz+1 obj.SetPolygon(zzz, c4d.CPolygon(pa+3,pa,pa+4,pa+7)) zzz=zzz+1 obj.Message(c4d.MSG_UPDATE) return obj def main(): PunkteErzeugen() plyobj = CreatePolygonObject() doc.InsertObject(plyobj, None, None, True) c4d.EventAdd() if __name__=='__main__': main()