1 #!/usr/bin/env python
\r
7 import tkinter.filedialog
\r
10 import opengl.rokuro
\r
15 class Frame(tkinter.Frame):
\r
16 def __init__(self, width, height, master=None, **kw):
\r
17 super(Frame, self).__init__(master, **kw)
\r
18 self.master.title('pymeshio viewer')
\r
21 menu_bar = tkinter.Menu(self)
\r
22 self.master.config(menu=menu_bar)
\r
24 menu_file = tkinter.Menu(menu_bar, tearoff=False)
\r
25 menu_bar.add_cascade(label='File', menu=menu_file, underline=0)
\r
27 menu_file.add_command(label='Open', under=0, command=self.onOpen)
\r
29 # setup opengl widget
\r
30 self.view=opengl.rokuro.RokuroView()
\r
31 self.glworld=opengl.BaseController(self.view)
\r
32 self.glwidget=togl.Widget(self, self.glworld, width=width, height=height)
\r
33 self.glwidget.pack(fill=tkinter.BOTH, expand=True)
\r
36 self.bind('<Key>', self.onKeyDown)
\r
37 self.bind('<MouseWheel>', lambda e: self.glworld.onWheel(-e.delta) and self.glwidget.onDraw())
\r
40 path=tkinter.filedialog.askopenfilename(
\r
42 ('poloygon model files', '*.mqo;*.pmd'),
\r
44 initialdir=self.current)
\r
45 self.current=os.path.dirname(path)
\r
48 def load(self, path):
\r
49 model=self.loadModel(path)
\r
51 print('fail to load %s' % path)
\r
53 print('load %s' % path)
\r
55 self.glworld.setRoot(model)
\r
56 bb=model.get_boundingbox()
\r
58 self.view.look_bb(*bb)
\r
59 self.glwidget.onDraw()
\r
61 def loadModel(self, path):
\r
62 if path.lower().endswith(".mqo"):
\r
63 return mqobuilder.build(path)
\r
64 elif path.lower().endswith(".pmd"):
\r
65 return pmdbuilder.build(path)
\r
67 def onKeyDown(self, event):
\r
76 print("keycode: %d" % key)
\r
79 if __name__ == '__main__':
\r
80 f = Frame(width=600, height=600)
\r
81 f.pack(fill=tkinter.BOTH, expand=True)
\r