OSDN Git Service

add mqo loader
[meshio/pymeshio.git] / examples / pymeshviewer.py
1 #!/usr/bin/env python\r
2 # coding: utf-8\r
3 \r
4 import sys\r
5 import os\r
6 import tkinter\r
7 import tkinter.filedialog\r
8 import togl\r
9 import opengl\r
10 import opengl.rokuro\r
11 import mqobuilder\r
12 \r
13 \r
14 class Frame(tkinter.Frame):\r
15     def __init__(self, width, height, master=None, **kw):\r
16         super(Frame, self).__init__(master, **kw)\r
17         self.master.title('pymeshio viewer')\r
18         self.current='.'\r
19         # setup menu\r
20         menu_bar = tkinter.Menu(self)\r
21         self.master.config(menu=menu_bar)\r
22 \r
23         menu_file = tkinter.Menu(menu_bar, tearoff=False)\r
24         menu_bar.add_cascade(label='File', menu=menu_file, underline=0)\r
25 \r
26         menu_file.add_command(label='Open', under=0, command=self.onOpen)\r
27 \r
28         # setup opengl widget\r
29         self.glworld=opengl.BaseController(opengl.rokuro.RokuroView(25))\r
30         self.glwidget=togl.Widget(self, self.glworld, width=width, height=height)\r
31         self.glwidget.pack(fill=tkinter.BOTH, expand=True)\r
32 \r
33         # event binding\r
34         self.bind('<Key>', self.onKeyDown)\r
35         self.bind('<MouseWheel>', lambda e: self.glworld.onWheel(-e.delta) and self.glwidget.onDraw())\r
36 \r
37     def onOpen(self):\r
38         filename=tkinter.filedialog.askopenfilename(\r
39                 filetypes=[\r
40                     ('poloygon model files', '*.mqo;*.pmd'),\r
41                     ], \r
42                 initialdir=self.current)\r
43         if filename.lower().endswith(".mqo"):\r
44             self.loadMqo(filename)\r
45         elif filename.lower().endswith(".pmd"):\r
46             self.loadPmd(filename)\r
47         self.current=os.path.dirname(filename)\r
48 \r
49     def loadMqo(self, path):\r
50         # load scenee\r
51         model=mqobuilder.build(path)\r
52         if not model:\r
53             print('fail to load %s' % path)\r
54             return\r
55         self.glworld.setRoot(model)\r
56         print('loadMqo %s' % path)\r
57         self.glwidget.onDraw()\r
58 \r
59     def loadPmd(self, path):\r
60         print('loadPmd %s' % path)\r
61 \r
62     def onKeyDown(self, event):\r
63         key=event.keycode\r
64         if key==27:\r
65             # Escape\r
66             sys.exit()\r
67         if key==81:\r
68             # q\r
69             sys.exit()\r
70         else:\r
71             print("keycode: %d" % key)\r
72 \r
73 \r
74 if __name__ == '__main__':\r
75     f = Frame(width=600, height=600)\r
76     f.pack(fill=tkinter.BOTH, expand=True)\r
77     f.focus_set()\r
78     f.mainloop()\r
79 \r