1 #!/usr/bin/env python
\r
4 this script require pyOpenGL, PIL, numpy and Togl(tck/tk).
\r
6 Togl install on Windows
\r
7 =======================
\r
9 * download Togl2.0-8.4-Windows.zip
\r
10 * copy Togl2.0-8.4-Windows/lib/Togl2.0 to C:/PythonXX/tcl/Togl2.0
\r
17 import tkinter.filedialog as tkinter_filedialog
\r
18 except ImportError as e:
\r
19 import Tkinter as tkinter
\r
20 import tkFileDialog as tkinter_filedialog
\r
23 import opengl.rokuro
\r
29 class Frame(tkinter.Frame):
\r
30 def __init__(self, width, height, master=None, **kw):
\r
31 #super(Frame, self).__init__(master, **kw)
\r
32 tkinter.Frame.__init__(self, master, **kw)
\r
33 self.master.title('pymeshio viewer')
\r
36 menu_bar = tkinter.Menu(self)
\r
37 self.master.config(menu=menu_bar)
\r
39 menu_file = tkinter.Menu(menu_bar, tearoff=False)
\r
40 menu_bar.add_cascade(label='File', menu=menu_file, underline=0)
\r
42 menu_file.add_command(label='Open', under=0, command=self.onOpen)
\r
44 # setup opengl widget
\r
45 self.view=opengl.rokuro.RokuroView()
\r
46 self.glworld=opengl.BaseController(self.view)
\r
47 self.glwidget=togl.Widget(self, self.glworld, width=width, height=height)
\r
48 self.glwidget.pack(fill=tkinter.BOTH, expand=True)
\r
51 self.bind('<Key>', self.onKeyDown)
\r
52 self.bind('<MouseWheel>', lambda e: self.glworld.onWheel(-e.delta) and self.glwidget.onDraw())
\r
55 path=tkinter_filedialog.askopenfilename(
\r
57 ('poloygon model files', '*.mqo;*.pmd;*.pmx'),
\r
59 initialdir=self.current)
\r
60 self.current=os.path.dirname(path)
\r
63 def load(self, path):
\r
64 model=self.loadModel(path)
\r
66 print('fail to load %s' % path)
\r
68 print('load %s' % path)
\r
70 self.glworld.setRoot(model)
\r
71 bb=model.get_boundingbox()
\r
73 self.view.look_bb(*bb)
\r
74 self.glwidget.onDraw()
\r
76 def loadModel(self, path):
\r
77 if path.lower().endswith(".mqo"):
\r
78 return mqobuilder.build(path)
\r
79 elif path.lower().endswith(".pmd"):
\r
80 return pmdbuilder.build(path)
\r
81 elif path.lower().endswith(".pmx"):
\r
82 return pmxbuilder.build(path)
\r
84 print("unknown file format: {0}".format(path))
\r
86 def onKeyDown(self, event):
\r
95 print("keycode: %d" % key)
\r
98 if __name__ == '__main__':
\r
99 f = Frame(width=600, height=600)
\r
100 f.pack(fill=tkinter.BOTH, expand=True)
\r
102 if len(sys.argv)>1:
\r
103 f.load(sys.argv[1])
\r