def main(): print(ocl.revision()) myscreen = camvtk.VTKScreen() myscreen.camera.SetPosition(2, 2, 5) myscreen.camera.SetFocalPoint(0.5,0, 1) # axis arrows camvtk.drawArrows(myscreen,center=(-2,-2,0)) camvtk.drawOCLtext(myscreen) s = ocl.BallCutterVolume() #s = ocl.CylCutterVolume() #s = ocl.BullCutterVolume() #s.center = ocl.Point(-2.50,-0.6,0) s.r1=0.3 s.r2=0.1 s.radius = 0.4 s.length = 2 startpoint = ocl.Point(0.46,1.0,0.4) s.setPos( startpoint ) # screenshot writer w2if = vtk.vtkWindowToImageFilter() w2if.SetInput(myscreen.renWin) lwr = vtk.vtkPNGWriter() lwr.SetInput( w2if.GetOutput() ) cp= ocl.Point(0,0,0) # center of octree max_depth = 6 root_scale = 1 t = ocl.Octree(root_scale, max_depth, cp) t.init(2) n = 0 # the frame number print("root_scale = ", t.root_scale()) print(" max_depth = ", t.max_depth()) print(" leaf_scale=", t.leaf_scale()) # X #stockbox = ocl.PlaneVolume( 1, 0, -0.9) #t.diff_negative(stockbox) #stockbox = ocl.PlaneVolume( 0, 0, 0.9 ) #t.diff_negative(stockbox) # Y #stockbox = ocl.PlaneVolume( 1, 1, -0.9) #t.diff_negative(stockbox) #stockbox = ocl.PlaneVolume( 0, 1, 0.9 ) #t.diff_negative(stockbox) # Z #stockbox = ocl.PlaneVolume( 1, 2, 0.1 ) #t.diff_negative(stockbox) #stockbox = ocl.PlaneVolume( 0, 2, 0.8) #t.diff_negative(stockbox) #t.diff_negative(s) mc = ocl.MarchingCubes() print("mc()...",) tris = mc.mc_tree(t) # t.mc_triangles() print(" mc() got ", len(tris), " triangles") #tris2 = t.side_triangles() #print "appending" #for tr in tris2: # tris.append(tr) #print " side_triangles() got ", len(tris2), " triangles" mc_surf = camvtk.STLSurf( triangleList=tris ) mc_surf.SetColor(camvtk.cyan) #s_surf = camvtk.STLSurf( triangleList=tris2 ) #s_surf.SetColor(camvtk.yellow) #mc_surf.SetWireframe() #mc_surf.SetOpacity(0.3) print(" STLSurf()...",) myscreen.addActor( mc_surf ) #myscreen.addActor( s_surf ) print("done.") myscreen.render() myscreen.render() #myscreen.iren.Start() #exit() myscreen.removeActor( mc_surf ) #myscreen.removeActor( s_surf ) #renderinterleave=900 #step_time = 0 Nmax=10 #dy = float(-2)/float(Nmax) dy = - 2* t.leaf_scale() cl = startpoint while (n<Nmax): cl = cl + ocl.Point(0.0,dy,0) #cl = ocl.Point( clpoints[n].x, clpoints[n].y, clpoints[n].z ) s.setPos( cl ) # move the cutter t_before = time.time() t.diff_negative(s) # subtract cutter from stock t_after = time.time() build_time = t_after-t_before #print n," diff() took ",build_time," s" #step_time=step_time+build_time if n<Nmax: myscreen.removeActor( mc_surf ) #myscreen.removeActor( s_surf ) #for c in cactors: # myscreen.removeActor( c ) #call_ms = 1e3*step_time/renderinterleave #print renderinterleave," diff() calls in", step_time, " = ", call_ms," ms/call" #infotext= "Octree max_depth=%i \nCL-point %i of %i \ndiff() CPU-time: %f ms/CL-point" % (max_depth,n, # len(clpoints), call_ms ) #octtext.SetText(infotext) #postext= "X: %f\nY: %f\nZ: %f" % (cl.x,cl.y,cl.z ) #cltext.SetText(postext) #cactors = camvtk.drawBallCutter(myscreen, cutter, cl) #t_before = time.time() #print "mc()...", tris = mc.mc_tree(t) #t.mc_triangles() #tris2 = t.side_triangles() #print "appending" #for tr in tris2: # tris.append(tr) #mc_time = time.time()-t_before #print "done in ", mc_time," s" #print " mc() got ", len(tris), " triangles" #print " STLSurf()...", mc_surf = camvtk.STLSurf( triangleList=tris ) mc_surf.SetWireframe() mc_surf.SetColor(camvtk.cyan) myscreen.addActor( mc_surf ) #s_surf = camvtk.STLSurf( triangleList=tris2 ) #s_surf.SetWireframe() #s_surf.SetColor(camvtk.yellow) #myscreen.addActor( s_surf ) #print "done." #print " render()...", myscreen.render() #myscreen.camera.Azimuth( 0.1 ) #lwr.SetFileName("frames/wireframe3_d8_frame"+ ('%06d' % n)+".png") #w2if.Modified() #lwr.Write() #print "done." #time.sleep(0.4) print(n, " mc_tris=",len(tris)) #," side_tris=",len(tris2) n=n+1 #myscreen.camera.SetPosition(3*math.cos( 7*float(n)/(float(Nmax)) ), 3*math.sin( 7*float(n)/(float(Nmax)) ), 5) #myscreen.camera.Azimuth( math.sin( 5*float(n)/(float(Nmax)) ) ) print("all done.") myscreen.iren.Start() exit()
def main(): print ocl.revision() myscreen = camvtk.VTKScreen() myscreen.camera.SetPosition(-8, -4, 25) myscreen.camera.SetFocalPoint(4.5, 6, 0) # axis arrows camvtk.drawArrows(myscreen, center=(-1, -1, 0)) camvtk.drawOCLtext(myscreen) octtext = camvtk.Text() octtext.SetPos((70, myscreen.height - 600)) myscreen.addActor(octtext) cltext = camvtk.Text() cltext.SetPos((70, myscreen.height - 100)) myscreen.addActor(cltext) stl = camvtk.STLSurf("../../stl/gnu_tux_mod.stl") #myscreen.addActor(stl) #stl.SetWireframe() stl.SetColor((0.5, 0.5, 0.5)) polydata = stl.src.GetOutput() s = ocl.STLSurf() camvtk.vtkPolyData2OCLSTL(polydata, s) print "STL surface read,", s.size(), "triangles" #angle = math.pi/4 radius = 0.4 length = 10 cutter = ocl.BallCutter(2 * radius, length) #cutter = ocl.CylCutter(2*radius, length) # generate CL-points minx = 0 dx = 0.1 / 0.2 maxx = 9 miny = 0 dy = cutter.getRadius() / 1.5 maxy = 12 z = -1 # this generates a list of CL-points in a grid clpoints = pyocl.CLPointGrid(minx, dx, maxx, miny, dy, maxy, z) # batchdropcutter bdc = ocl.BatchDropCutter() bdc.bucketSize = 10 bdc.setSTL(s) bdc.setCutter(cutter) #bdc.setThreads(1) # explicitly setting one thread is better for debugging for p in clpoints: bdc.appendPoint(p) t_before = time.time() bdc.run() t_after = time.time() calctime = t_after - t_before print " BDC4 done in ", calctime, " s" dropcutter_time = calctime clpoints = bdc.getCLPoints() #camvtk.drawCLPointCloud(myscreen, clpoints) print " clpts= ", len(clpoints) myscreen.render() #myscreen.iren.Start() #exit() s = ocl.BallCutterVolume() #s = ocl.CylCutterVolume() #s.center = ocl.Point(-2.50,-0.6,0) s.radius = cutter.getRadius() s.length = cutter.getLength() # screenshot writer w2if = vtk.vtkWindowToImageFilter() w2if.SetInput(myscreen.renWin) lwr = vtk.vtkPNGWriter() lwr.SetInput(w2if.GetOutput()) cp = ocl.Point(5, 5, -6) # center of octree #depths = [3, 4, 5, 6, 7, 8] max_depth = 7 root_scale = 10 t = ocl.Octree(root_scale, max_depth, cp) t.init(5) n = 0 # the frame number stockbox = ocl.PlaneVolume(1, 0, 0.1) t.diff_negative(stockbox) stockbox = ocl.PlaneVolume(0, 0, 8.9) t.diff_negative(stockbox) stockbox = ocl.PlaneVolume(1, 1, 0.1) t.diff_negative(stockbox) stockbox = ocl.PlaneVolume(0, 1, 11.9) t.diff_negative(stockbox) stockbox = ocl.PlaneVolume(1, 2, -0.5) t.diff_negative(stockbox) stockbox = ocl.PlaneVolume(0, 2, 3) t.diff_negative(stockbox) mc = ocl.MarchingCubes() print "stock mc()...", tris = mc.mc_tree(t) # t.mc_triangles() print " mc() got ", len(tris), " triangles" mc_surf = camvtk.STLSurf(triangleList=tris, color=camvtk.red) mc_surf.SetColor(camvtk.cyan) print "stock STLSurf()...", myscreen.addActor(mc_surf) print "done." myscreen.render() #myscreen.iren.Start() #exit() myscreen.removeActor(mc_surf) renderinterleave = 10 step_time = 0 while (n < len(clpoints)): cl = ocl.Point(clpoints[n].x, clpoints[n].y, clpoints[n].z) s.setPos(cl) #myscreen.addActor( camvtk.Point( center=(cl.x,cl.y,cl.z), color=camvtk.yellow)) print n, ": diff...", t_before = time.time() t.diff_negative(s) t_after = time.time() build_time = t_after - t_before #print "done in ", build_time," s" step_time = step_time + build_time n = n + 1 if ((n % renderinterleave) == 0): infotext = "Octree max_depth=%i \nCL-point %i of %i \ndiff()-time: %f ms/CL-point" % ( max_depth, n, len(clpoints), 1e3 * step_time / renderinterleave) octtext.SetText(infotext) postext = "X: %f\nY: %f\nZ: %f" % (cl.x, cl.y, cl.z) cltext.SetText(postext) cactors = camvtk.drawBallCutter(myscreen, cutter, cl) print cactors t_before = time.time() print "mc()...", tris = mc.mc_tree(t) #.mc_triangles() t_after = time.time() mc_time = t_after - t_before print "done in ", mc_time, " s" print " mc() got ", len(tris), " triangles" mc_surf = camvtk.STLSurf(triangleList=tris, color=camvtk.red) #mc_surf.SetWireframe() mc_surf.SetColor(camvtk.cyan) print " STLSurf()...", myscreen.addActor(mc_surf) print "done." print " render()...", myscreen.render() myscreen.camera.Azimuth(0.5) lwr.SetFileName("frames/cutsim_d9_frame" + ('%06d' % n) + ".png") w2if.Modified() lwr.Write() print "done." myscreen.removeActor(mc_surf) for c in cactors: myscreen.removeActor(c) step_time = 0 #lwr.SetFileName("frames/mc8_frame"+ ('%06d' % n)+".png") #myscreen.camera.Azimuth( 2 ) #myscreen.render() #w2if.Modified() #lwr.Write() #mc_surf.SetWireframe() #print "sleep...", #time.sleep(1.02) #print "done." # move forward #theta = n*dtheta #sp1 = ocl.Point(s.center) #s.center = ocl.Point( 1.7*math.cos(theta),1.3*math.sin(theta),thetalift*theta) #sp2 = ocl.Point(s.center) #print "line from ",sp1," to ",sp2 #if n is not nmax: # myscreen.addActor( camvtk.Line( p1=(sp1.x,sp1.y,sp1.z),p2=(sp2.x,sp2.y,sp2.z), color=camvtk.red ) ) #print "center moved to", s.center print " clpts= ", len(clpoints) print "All done." myscreen.iren.Start()
def main(): print(ocl.revision()) myscreen = camvtk.VTKScreen() myscreen.camera.SetPosition(-8, -4, 25) myscreen.camera.SetFocalPoint(4.5, 6, 0) # axis arrows camvtk.drawArrows(myscreen, center=(-1, -1, 0)) camvtk.drawOCLtext(myscreen) octtext = camvtk.Text() octtext.SetPos((70, myscreen.height - 600)) myscreen.addActor(octtext) cltext = camvtk.Text() cltext.SetPos((70, myscreen.height - 100)) myscreen.addActor(cltext) stl = camvtk.STLSurf("../../stl/gnu_tux_mod.stl") #myscreen.addActor(stl) #stl.SetWireframe() stl.SetColor((0.5, 0.5, 0.5)) polydata = stl.src.GetOutput() s = ocl.STLSurf() camvtk.vtkPolyData2OCLSTL(polydata, s) print("STL surface read,", s.size(), "triangles") #angle = math.pi/4 radius = 0.4 length = 5 cutter = ocl.BallCutter(2 * radius, length) #cutter = ocl.CylCutter(2*radius, length) # generate CL-points minx = 0 dx = 0.1 / 0.4 maxx = 9 miny = 0 dy = cutter.getRadius() / 1.5 maxy = 12 z = -1 # this generates a list of CL-points in a grid clpoints = pyocl.CLPointGrid(minx, dx, maxx, miny, dy, maxy, z) # batchdropcutter bdc = ocl.BatchDropCutter() bdc.bucketSize = 7 bdc.setSTL(s) bdc.setCutter(cutter) #bdc.setThreads(1) # explicitly setting one thread is better for debugging for p in clpoints: bdc.appendPoint(p) t_before = time.time() bdc.run() t_after = time.time() calctime = t_after - t_before print(" BDC4 done in ", calctime, " s") dropcutter_time = calctime clpoints = bdc.getCLPoints() #camvtk.drawCLPointCloud(myscreen, clpoints) print(" clpts= ", len(clpoints)) myscreen.render() #myscreen.iren.Start() #exit() s = ocl.BallCutterVolume() #s = ocl.CylCutterVolume() #s.center = ocl.Point(-2.50,-0.6,0) s.radius = cutter.getRadius() s.length = cutter.getLength() # screenshot writer w2if = vtk.vtkWindowToImageFilter() w2if.SetInput(myscreen.renWin) lwr = vtk.vtkPNGWriter() lwr.SetInput(w2if.GetOutput()) cp = ocl.Point(5, 5, -3) # center of octree #depths = [3, 4, 5, 6, 7, 8] max_depth = 7 root_scale = 7 t = ocl.Octree(root_scale, max_depth, cp) t.init(5) n = 0 # the frame number stockbox = ocl.PlaneVolume(1, 0, 0.1) t.diff_negative(stockbox) stockbox = ocl.PlaneVolume(0, 0, 8.9) t.diff_negative(stockbox) stockbox = ocl.PlaneVolume(1, 1, 0.1) t.diff_negative(stockbox) stockbox = ocl.PlaneVolume(0, 1, 11.9) t.diff_negative(stockbox) stockbox = ocl.PlaneVolume(1, 2, -0.5) t.diff_negative(stockbox) stockbox = ocl.PlaneVolume(0, 2, 3) t.diff_negative(stockbox) mc = ocl.MarchingCubes() print("mc()...", ) tris = mc.mc_tree(t) #.mc_triangles() print(" mc() got ", len(tris), " triangles") mc_surf = camvtk.STLSurf(triangleList=tris, color=camvtk.red) mc_surf.SetColor(camvtk.cyan) print(" STLSurf()...", ) myscreen.addActor(mc_surf) print("done.") cl = ocl.Point(0, 0, 5) cactors = camvtk.drawBallCutter(myscreen, cutter, cl) myscreen.render() #myscreen.iren.Start() #exit() myscreen.removeActor(mc_surf) renderinterleave = len(clpoints) / 100 step_time = 0 #render_time = 0 while (n < len(clpoints)): cl = ocl.Point(clpoints[n].x, clpoints[n].y, clpoints[n].z) s.setPos(cl) # move the cutter t_before = time.time() t.diff_negative(s) # subtract cutter from stock t_after = time.time() build_time = t_after - t_before step_time = step_time + build_time n = n + 1 if n < (len(clpoints) - renderinterleave): myscreen.removeActor(mc_surf) for c in cactors: myscreen.removeActor(c) if ((n % renderinterleave) == 0): cactors = camvtk.drawBallCutter(myscreen, cutter, cl) t_before = time.time() print("mc()...", ) tris = mc.mc_tree(t) #.mc_triangles() mc_time = time.time() - t_before print("done in ", mc_time, " s") print(" mc() got ", len(tris), " triangles") print(" STLSurf()...", ) t_before = time.time() mc_surf = camvtk.STLSurf(triangleList=tris, color=camvtk.red) #mc_surf.SetWireframe() mc_surf.SetColor(camvtk.cyan) myscreen.addActor(mc_surf) print("done.") print(" render()...", ) myscreen.render() render_time = time.time() - t_before myscreen.camera.Azimuth(0.1) lwr.SetFileName("frames/cutsim_d10_frame" + ('%06d' % n) + ".png") w2if.Modified() call_ms = step_time / renderinterleave print(renderinterleave, " diff() calls in", step_time, " = ", call_ms, " ms/call") infotext = "Octree max_depth=%i \nCL-point %i of %i \n%i CL-pts/frame\ndiff()-time: %1.3f s/CL-point\nmc()-time: %1.3f s/frame\nrender()-time: %1.3f s/frame\n%i Triangles" % ( max_depth, n, len(clpoints), renderinterleave, call_ms, mc_time, render_time, len(tris)) octtext.SetText(infotext) postext = "X: %f\nY: %f\nZ: %f" % (cl.x, cl.y, cl.z) cltext.SetText(postext) #lwr.Write() # uncomment to actually write files to disk print("done.") step_time = 0 #lwr.SetFileName("frames/mc8_frame"+ ('%06d' % n)+".png") #myscreen.camera.Azimuth( 2 ) #myscreen.render() #w2if.Modified() #lwr.Write() #mc_surf.SetWireframe() #print "sleep...", #time.sleep(1.02) #print "done." print(" clpts= ", len(clpoints)) print("All done.") myscreen.iren.Start()