OSDN Git Service

move pymeshio directory
[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 import pmdbuilder\r
13 \r
14 \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
19         self.current='.'\r
20         # setup menu\r
21         menu_bar = tkinter.Menu(self)\r
22         self.master.config(menu=menu_bar)\r
23 \r
24         menu_file = tkinter.Menu(menu_bar, tearoff=False)\r
25         menu_bar.add_cascade(label='File', menu=menu_file, underline=0)\r
26 \r
27         menu_file.add_command(label='Open', under=0, command=self.onOpen)\r
28 \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
34 \r
35         # event binding\r
36         self.bind('<Key>', self.onKeyDown)\r
37         self.bind('<MouseWheel>', lambda e: self.glworld.onWheel(-e.delta) and self.glwidget.onDraw())\r
38 \r
39     def onOpen(self):\r
40         path=tkinter.filedialog.askopenfilename(\r
41                 filetypes=[\r
42                     ('poloygon model files', '*.mqo;*.pmd'),\r
43                     ], \r
44                 initialdir=self.current)\r
45         self.current=os.path.dirname(path)\r
46         self.load(path)\r
47 \r
48     def load(self, path):\r
49         model=self.loadModel(path)\r
50         if not model:\r
51             print('fail to load %s' % path)\r
52             return\r
53         print('load %s' % path)\r
54         print(model)\r
55         self.glworld.setRoot(model)\r
56         bb=model.get_boundingbox()\r
57         print(bb)\r
58         self.view.look_bb(*bb)\r
59         self.glwidget.onDraw()\r
60 \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
66 \r
67     def onKeyDown(self, event):\r
68         key=event.keycode\r
69         if key==27:\r
70             # Escape\r
71             sys.exit()\r
72         if key==81:\r
73             # q\r
74             sys.exit()\r
75         else:\r
76             print("keycode: %d" % key)\r
77 \r
78 \r
79 if __name__ == '__main__':\r
80     f = Frame(width=600, height=600)\r
81     f.pack(fill=tkinter.BOTH, expand=True)\r
82     f.focus_set()\r
83     if len(sys.argv)>1:\r
84         f.load(sys.argv[1])\r
85     f.mainloop()\r
86 \r