File: batchdropcutter_mtrush.py

package info (click to toggle)
opencamlib 2023.01.11-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 29,800 kB
  • sloc: cpp: 8,722; python: 5,530; sh: 604; javascript: 310; makefile: 209
file content (92 lines) | stat: -rw-r--r-- 2,373 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from opencamlib import ocl, pyocl, camvtk
import time

if __name__ == "__main__":  
    print(ocl.version())
    myscreen = camvtk.VTKScreen()
    
    #stl = camvtk.STLSurf("../../../stl/gnu_tux_mod.stl")
    stl = camvtk.STLSurf("../../../stl/mount_rush.stl")
    #stl = camvtk.STLSurf("../../../stl/pycam-textbox.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 with", s.size(), "triangles read")
    
    # define a cutter
    length=5
    cutter = ocl.BallCutter(15.4321, length)
    #cutter = ocl.CylCutter(1.123, length)
    #cutter = ocl.BullCutter(1.123, 0.2, length)
    #cutter = ocl.ConeCutter(0.43, math.pi/7, length)
    
    
    print(cutter)
    
    #define grid of CL-points
    minx=-42
    dx=0.5
    maxx=47
    miny=-27
    dy=0.2
    maxy=20
    z=-55
    clpoints = pyocl.CLPointGrid(minx,dx,maxx,miny,dy,maxy,z)
    print("generated grid with", len(clpoints)," CL-points")
    
    # batchdropcutter    
    bdc1 = ocl.BatchDropCutter()
    bdc1.setSTL(s)
    bdc1.setCutter(cutter)
    
    # push the points to ocl
    for p in clpoints:
        bdc1.appendPoint(p)
   
    # run the actual calculation
    t_before = time.time()    
    bdc1.run()
    t_after = time.time()
    calctime = t_after-t_before
    print(" done in ", calctime," s"    )

    
    # get back results from ocl
    clpts = bdc1.getCLPoints()

    
    # draw the results
    print("rendering...",)
    camvtk.drawCLPointCloud(myscreen, clpts)
    print("done")
    
    myscreen.camera.SetPosition(25, 23, 15)
    myscreen.camera.SetFocalPoint(4, 5, 0)
    
    # ocl text
    t = camvtk.Text()
    t.SetText("OpenCAMLib")
    t.SetPos( (myscreen.width-200, myscreen.height-30) )
    myscreen.addActor( t)
    
    # other text
    t2 = camvtk.Text()
    stltext = "%i triangles\n%i CL-points\n%0.1f seconds" % (s.size(), len(clpts), calctime)
    t2.SetText(stltext)
    t2.SetPos( (50, myscreen.height-100) )
    myscreen.addActor( t2)
    
    t3 = camvtk.Text()
    ctext = "Cutter: %s" % ( str(cutter) )
    
    t3.SetText(ctext)
    t3.SetPos( (50, myscreen.height-150) )
    myscreen.addActor( t3)
    
    myscreen.render()
    myscreen.iren.Start()
    raw_input("Press Enter to terminate")