Esempio n. 1
0
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(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()
Esempio n. 3
0
def main():  
    print ocl.revision()
    myscreen = camvtk.VTKScreen()   
    myscreen.camera.SetPosition(-15, -8, 15)
    myscreen.camera.SetFocalPoint(0,0, 0)   
    # axis arrows
    #camvtk.drawArrows(myscreen,center=(0,0,0))

    s = ocl.SphereOCTVolume()
    s.center = ocl.Point(-2.50,-0.6,0)
    s.radius = 1.1345

    # screenshot writer
    w2if = vtk.vtkWindowToImageFilter()
    w2if.SetInput(myscreen.renWin)
    lwr = vtk.vtkPNGWriter()
    lwr.SetInput( w2if.GetOutput() )
    
    cp= ocl.Point(0,0,-16)
    #depths = [3, 4, 5, 6, 7, 8]
    max_depth = 8
    root_scale = 16
    t = ocl.Octree(root_scale, max_depth, cp)
    t.init(4)
    n = 0 # the frame number
    nmax=80
    theta=0
    dtheta=0.06
    thetalift=-0.01
    s.center =  ocl.Point( 1.3*math.cos(theta),1.3*math.sin(theta),thetalift*theta)  
    mc = ocl.MarchingCubes()
    while (n<=nmax):
        print "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"
        
        if n==nmax:
            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."
            nodes = t.get_leaf_nodes()
            allpoints=[]
            #for no in nodes:
            #    verts = no.vertices()
            #    for v in verts:
            #        allpoints.append(v)
            #oct_points = camvtk.PointCloud( allpoints )
            print " PointCloud()...",
            #myscreen.addActor( oct_points )
            print "done."
            print " render()...",
            myscreen.render()

            print "done."

            #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."
                
            
            if n is not nmax:
                myscreen.removeActor( mc_surf )
                #myscreen.removeActor( oct_points )
        
        # move forward
        theta = n*dtheta
        sp1 = ocl.Point(s.center)
        s.center =  ocl.Point( 1.3*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
        n=n+1
    print "All done."
    myscreen.iren.Start() 
Esempio n. 4
0
def main():
    print ocl.revision()
    myscreen = camvtk.VTKScreen()
    myscreen.camera.SetPosition(-15, -8, 15)
    myscreen.camera.SetFocalPoint(0, 0, 0)
    # axis arrows
    camvtk.drawArrows(myscreen, center=(0, 0, 0))

    s = ocl.SphereOCTVolume()
    s.center = ocl.Point(-2.50, -0.6, 0)
    s.radius = 0.6345

    #sphere = camvtk.Sphere( center=(s.center.x,s.center.y,s.center.z), radius=s.radius, color=camvtk.cyan)
    #sphere.SetOpacity(0.1)
    #myscreen.addActor( sphere );

    # screenshot writer
    w2if = vtk.vtkWindowToImageFilter()
    w2if.SetInput(myscreen.renWin)
    lwr = vtk.vtkPNGWriter()
    lwr.SetInput(w2if.GetOutput())

    # text
    camvtk.drawOCLtext(myscreen)
    octtext = camvtk.Text()
    octtext.SetPos((myscreen.width - 400, myscreen.height - 290))
    myscreen.addActor(octtext)

    cp = ocl.Point(0, 0, -3)
    #depths = [3, 4, 5, 6, 7, 8]
    max_depth = 7
    root_scale = 3
    t = ocl.Octree(root_scale, max_depth, cp)
    t.init(4)
    n = 0  # the frame number
    nmax = 30
    theta = 0
    dtheta = 0.05
    s.center = ocl.Point(1.5 * math.cos(theta), 0.3 * math.sin(theta), theta)
    mc = ocl.MarchingCubes()
    tris = []
    while (n <= nmax):
        print "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"
        infotext = "Octree + Marching-Cubes test\nmax octree-depth:%i \ntriangles: %i \nbuild() time: %f ms" % (
            max_depth, len(tris), build_time * 1e3)
        octtext.SetText(infotext)

        if n == nmax:
            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."
            #nodes = t.get_leaf_nodes()
            #allpoints=[]
            #for no in nodes:
            #    verts = no.vertices()
            #    for v in verts:
            #        allpoints.append(v)
            #oct_points = camvtk.PointCloud( allpoints )
            #print " PointCloud()...",
            #myscreen.addActor( oct_points )
            #print "done."
            print " render()...",
            myscreen.render()

            print "done."

            #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."

            if n is not nmax:
                myscreen.removeActor(mc_surf)
                #myscreen.removeActor( oct_points )

        # move forward
        theta = n * dtheta
        s.center = ocl.Point(1.5 * math.cos(theta), 0.3 * math.sin(theta),
                             0.01 * theta)
        print "center moved to", s.center
        n = n + 1
    print "All done."
    myscreen.iren.Start()
Esempio n. 5
0
def main():
    print ocl.revision()
    myscreen = camvtk.VTKScreen()
    myscreen.camera.SetPosition(2, 2, 5)
    myscreen.camera.SetFocalPoint(0.5, 0, 1)
    camvtk.drawArrows(myscreen, center=(-2, -2, 0))  # axis arrows
    camvtk.drawOCLtext(myscreen)

    #s = ocl.BallCutterVolume()
    #s = ocl.CylCutterVolume()
    s = ocl.BullCutterVolume()
    s.r1 = 0.3
    s.r2 = 0.1
    s.radius = 0.4
    s.length = 2
    startpoint = ocl.Point(0.46, 0.2, 0.4)
    s.setPos(startpoint)
    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()

    print "mc()...",
    mc = ocl.MarchingCubes()
    tris = mc.mc_tree(t)

    mc_surf = camvtk.STLSurf(triangleList=tris)
    mc_surf.SetColor(camvtk.cyan)

    print " STLSurf()...",
    myscreen.addActor(mc_surf)

    print "done."
    myscreen.render()
    myscreen.removeActor(mc_surf)

    Nmax = 20
    dy = -1 * t.leaf_scale()
    cl = startpoint
    renderinterleave = 1
    while (n < Nmax):

        cl = cl + ocl.Point(0.0, dy, 0)
        s.setPos(cl)  # move the cutter
        t_before = time.time()
        t.diff_negative(s)  # subtract cutter from stock
        t_after = time.time()
        diff_time = t_after - t_before
        if n < Nmax:
            myscreen.removeActor(
                mc_surf)  # leave the surface on the very last iteration

        # marching cubes
        t_before = time.time()
        tris = mc.mc_tree(t)
        t_after = time.time()
        mc_time = t_after - t_before

        # render
        t_before = time.time()
        mc_surf = camvtk.STLSurf(triangleList=tris)
        mc_surf.SetColor(camvtk.cyan)
        myscreen.addActor(mc_surf)
        myscreen.render()

        t_after = time.time()
        render_time = t_after - t_before
        print "%i: mc_tris=%i\t diff=%1.3f \t mc=%1.3f \t ren=%1.3f" % (
            n, len(tris), diff_time, mc_time, render_time)
        n = n + 1

    print "all done."
    myscreen.iren.Start()
    exit()
def main(filename="frame/f.png"):
    print(ocl.revision())

    myscreen = camvtk.VTKScreen()
    myscreen.camera.SetPosition(-15, -8, 15)
    myscreen.camera.SetFocalPoint(5, 5, 0)
    # axis arrows
    camvtk.drawArrows(myscreen, center=(0, 0, 0))

    # screenshot writer
    w2if = vtk.vtkWindowToImageFilter()
    w2if.SetInput(myscreen.renWin)
    lwr = vtk.vtkPNGWriter()
    lwr.SetInput(w2if.GetOutput())

    c = ocl.CylCutter(3, 10)  # cutter
    c.length = 3
    print("cutter length=", c.length)

    cp = ocl.Point(0, 0, 0)
    max_depth = 9
    root_scale = 3
    t = ocl.Octree(root_scale, max_depth, cp)
    print(t)

    nodes = t.get_leaf_nodes()
    t.init(1)
    #nodes=[]
    s = ocl.SphereOCTVolume()
    s.center = ocl.Point(0, 0, 0)
    s.radius = 2.6345
    print("build...", )
    t.build(s)
    print("done.")
    print(t)

    sphere = camvtk.Sphere(center=(s.center.x, s.center.y, s.center.z),
                           radius=s.radius,
                           color=camvtk.cyan)
    sphere.SetOpacity(0.1)
    myscreen.addActor(sphere)

    nodes = t.get_surface_nodes()
    print("got ", len(nodes), " surface nodes")

    points = []
    for n in nodes:
        #n=nodes[0]
        verts = n.vertices()
        #c = n.center
        #print " node at depth=", n.depth," center=",c
        #myscreen.addActor( camvtk.Sphere( center=(c.x,c.y,c.z), radius=0.1, color=camvtk.yellow ))
        for v in verts:
            #print v
            #myscreen.addActor( camvtk.Sphere( center=(v.x,v.y,v.z), radius=0.1 ))
            #
            points.append(v)

    #myscreen.addActor( camvtk.PointCloud( pointlist= points))

    tris = t.mc_triangles()
    mc_surf = camvtk.STLSurf(triangleList=tris, color=camvtk.red)
    #mc_surf.SetWireframe()
    myscreen.addActor(mc_surf)
    print(" render()...", )
    myscreen.render()
    print("done.")

    #time.sleep(0.2)

    myscreen.iren.Start()
Esempio n. 7
0
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()
Esempio n. 8
0
def main():
    print(ocl.revision())
    myscreen = camvtk.VTKScreen()
    myscreen.camera.SetPosition(-15, -8, 15)
    myscreen.camera.SetFocalPoint(0, 0, 0)
    # axis arrows
    camvtk.drawArrows(myscreen, center=(0, 0, 0))

    s = ocl.SphereOCTVolume()
    s.center = ocl.Point(0, 0, 0)
    s.radius = 2.6345

    sphere = camvtk.Sphere(center=(s.center.x, s.center.y, s.center.z),
                           radius=s.radius,
                           color=camvtk.cyan)
    sphere.SetOpacity(0.1)
    myscreen.addActor(sphere)

    # screenshot writer
    w2if = vtk.vtkWindowToImageFilter()
    w2if.SetInput(myscreen.renWin)
    lwr = vtk.vtkPNGWriter()
    lwr.SetInput(w2if.GetOutput())

    # text
    camvtk.drawOCLtext(myscreen)
    octtext = camvtk.Text()
    octtext.SetPos((myscreen.width - 400, myscreen.height - 290))
    myscreen.addActor(octtext)

    cp = ocl.Point(0, 0, 0)
    #depths = [3, 4, 5, 6, 7, 8]
    depths = [4, 5]
    root_scale = 3
    n = 0  # the frame number
    for max_depth in depths:
        t = ocl.Octree(root_scale, max_depth, cp)
        t.init(1)
        print("build...", )
        t_before = time.time()
        t.diff_positive(s)
        t_after = time.time()
        build_time = t_after - t_before
        print("done.")
        tris = t.mc_triangles()
        infotext = "Octree + Marching-Cubes test\nmax octree-depth:%i \ntriangles: %i \nbuild() time: %f ms" % (
            max_depth, len(tris), build_time * 1e3)
        octtext.SetText(infotext)

        mc_surf = camvtk.STLSurf(triangleList=tris, color=camvtk.red)
        #
        myscreen.addActor(mc_surf)
        print(" render()...", )
        myscreen.render()
        print("done.")
        for m in range(0, 180):
            # do a rotating animation
            lwr.SetFileName("frames/mc8_frame" + ('%06d' % n) + ".png")
            myscreen.camera.Azimuth(2)
            myscreen.render()
            w2if.Modified()
            #lwr.Write()

            if m > 90:
                mc_surf.SetWireframe()
            time.sleep(0.02)

            n = n + 1
        myscreen.removeActor(mc_surf)

    myscreen.iren.Start()