""" Double Diamond 2 Surface 13.05.2020 """ import c4d import math # Variablen und Konstanten dialog_title = 'Double Diamond 2 Surface' # Die Figur besteht aus 8 Teilen (N=1 bis N=8) die nacheinander berechnet werden muessen. N = 1 a = 1*math.pi Nx = 200 # Anzahl Punkte x Ny = 200 # Anzahl Punkte y Nz = 200 # Anzahl Punkte z Faktor = 100/math.pi # 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) # Ein Teil von 8 auswaehlen if N == 1: xMin = -a # Bereich x xMax = 0 # Bereich x yMin = -a # Bereich y yMax = 0 # Bereich y zMin = -a # Bereich z zMax = 0 # Bereich z elif N == 2: xMin = -a # Bereich x xMax = 0 # Bereich x yMin = 0 # Bereich y yMax = a # Bereich y zMin = -a # Bereich z zMax = 0 # Bereich z elif N == 3: xMin = -a # Bereich x xMax = 0 # Bereich x yMin = 0 # Bereich y yMax = a # Bereich y zMin = 0 # Bereich z zMax = a # Bereich z elif N == 4: xMin = -a # Bereich x xMax = 0 # Bereich x yMin = -a # Bereich y yMax = 0 # Bereich y zMin = 0 # Bereich z zMax = a # Bereich z elif N == 5: xMin = 0 # Bereich x xMax = a # Bereich x yMin = -a # Bereich y yMax = 0 # Bereich y zMin = -a # Bereich z zMax = 0 # Bereich z elif N == 6: xMin = 0 # Bereich x xMax = a # Bereich x yMin = 0 # Bereich y yMax = a # Bereich y zMin = -a # Bereich z zMax = 0 # Bereich z elif N == 7: xMin = 0 # Bereich x xMax = a # Bereich x yMin = 0 # Bereich y yMax = a # Bereich y zMin = 0 # Bereich z zMax = a # Bereich z elif N == 8: xMin = 0 # Bereich x xMax = a # Bereich x yMin = -a # Bereich y yMax = 0 # Bereich y zMin = 0 # Bereich z zMax = a # Bereich z # 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 func=math.cos(2*x)*math.cos(2*y)+math.cos(2*y)*math.cos(2*z)+math.cos(2*x)*math.cos(2*z)+math.sin(2*x)*math.sin(2*y)*math.sin(2*z) if abs(func) < 0.03: # 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()