""" Ortho Circles 27.05.2020 """ import c4d import math # Variablen und Konstanten dialog_title = 'Ortho Circles' # Die Figur besteht aus 8 Teilen (N=1 bis N=8) die nacheinander berechnet werden muessen. N = 1 a = 1.2 Nx = 300 # Anzahl Punkte x Ny = 300 # Anzahl Punkte y Nz = 300 # Anzahl Punkte z Faktor = 100 # Skalierungsfaktor ff=0.075 bb=3.0 def CreatePolygonObject(): # Polygonobjekt erzeugen obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject((Nx+1)*(Ny+1)*120, 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=((x**2 + y**2 - 1)**2 + z**2)*((y**2 + z**2 - 1)**2 + x**2)*((z**2 + x**2 - 1)**2 + y**2) - ff**2*(1 + bb*(x**2 + y**2 + z**2)) if abs(func) < 0.002: # 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()