OSDN Git Service

fix shift FACTOR
[meshio/pymeshio.git] / examples / opengl / rokuro.py
1 #!/usr/bin/python\r
2 # coding: utf-8\r
3 \r
4 from OpenGL.GL import *\r
5 from OpenGL.GLU import *\r
6 \r
7 from . import baseview\r
8 \r
9 class RokuroView(baseview.BaseView):\r
10     def __init__(self, distance):\r
11         super(RokuroView, self).__init__()\r
12         self.w=1\r
13         self.h=1\r
14         self.head=0\r
15         self.pitch=0\r
16         self.distance=distance\r
17         self.shiftX=0\r
18         self.shiftY=0\r
19         self.aspect=1\r
20         self.n=1\r
21         self.f=10000\r
22 \r
23     def onResize(self, w=None, h=None):\r
24         super(RokuroView, self).onResize(w, h)\r
25         self.aspect=float(self.w)/float(self.h)\r
26 \r
27     def dolly(self, d):\r
28         if d>0:\r
29             self.distance*=1.1\r
30         elif d<0:\r
31             self.distance*=0.9\r
32 \r
33     def shift(self, dx, dy):\r
34         FACTOR=0.001\r
35         self.shiftX+=dx * self.distance * FACTOR\r
36         self.shiftY+=dy * self.distance * FACTOR\r
37 \r
38     def rotate(self, head, pitch):\r
39         self.head+=head\r
40         self.pitch+=pitch\r
41 \r
42     def updateProjection(self):\r
43         gluPerspective(30, self.aspect, self.n, self.f)\r
44 \r
45     def updateView(self):\r
46         glTranslate(self.shiftX, self.shiftY, -self.distance)\r
47         glRotate(self.head, 0, 1, 0)\r
48         glRotate(self.pitch, 1, 0, 0)\r
49 \r
50     def onMotion(self, x, y):\r
51         redraw=False\r
52         if self.isLeftDown:\r
53             self.dolly(y-self.y)\r
54             redraw=True\r
55         if self.isMiddelDown:\r
56             self.shift(x-self.x, self.y-y)\r
57             redraw=True\r
58         if self.isRightDown:\r
59             self.rotate(x-self.x, y-self.y)\r
60             redraw=True\r
61         self.x=x\r
62         self.y=y\r
63         return redraw\r
64 \r
65     def onWheel(self, d):\r
66         if d!=0:\r
67             self.dolly(d)\r
68             return True\r
69 \r