""" Clebsch Surface 25.06.2020 """ import c4d import math # Variablen und Konstanten dialog_title = 'Clebsch Surface' a = 1.0 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 = 200 # Anzahl Punkte x Ny = 200 # Anzahl Punkte y Nz = 200 # Anzahl Punkte z Faktor = 100 # Skalierungsfaktor def CreatePolygonObject(): # Polygonobjekt erzeugen obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject((Nx+1)*(Ny+1)*(Nz+1)*8, Nx*Ny*80*8) obj.SetName(dialog_title) # Variablen zz=0 # Zaehler fuer Punkte zzz=0 # Zaehler fuer Polygone # 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 Parameter x=xMin+i*dx y=yMin+j*dy z=zMin+k*dz F1 = 81 * (x**3+y**3+z**3) F2 = 189 * (x**2*(y+z)+y**2*(x+z)+z**2*(x+y)) F3 = 54 * x * y * z F4 = 126 * (x*y+x*z+y*z) F5 = 9 * (x**2+y**2+z**2) F6 = 9 * (x+y+z) func = F1 - F2 + F3 + F4 - F5 + F6 + 1 if abs(func) < 0.851: # 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(): plyobj = CreatePolygonObject() doc.InsertObject(plyobj, None, None, True) c4d.EventAdd() if __name__=='__main__': main()