OSDN Git Service

first commit
[meshio/pymeshio.git] / examples / opengl / rokuro.py
diff --git a/examples/opengl/rokuro.py b/examples/opengl/rokuro.py
new file mode 100644 (file)
index 0000000..fd9eaff
--- /dev/null
@@ -0,0 +1,68 @@
+#!/usr/bin/python\r
+# coding: utf-8\r
+\r
+from OpenGL.GL import *\r
+from OpenGL.GLU import *\r
+\r
+from . import baseview\r
+\r
+class RokuroView(baseview.BaseView):\r
+    def __init__(self, distance):\r
+        super(RokuroView, self).__init__()\r
+        self.w=1\r
+        self.h=1\r
+        self.head=0\r
+        self.pitch=0\r
+        self.distance=distance\r
+        self.shiftX=0\r
+        self.shiftY=0\r
+        self.aspect=1\r
+        self.n=1\r
+        self.f=10000\r
+\r
+    def onResize(self, w=None, h=None):\r
+        super(RokuroView, self).onResize(w, h)\r
+        self.aspect=float(self.w)/float(self.h)\r
+\r
+    def dolly(self, d):\r
+        if d>0:\r
+            self.distance*=1.1\r
+        elif d<0:\r
+            self.distance*=0.9\r
+\r
+    def shift(self, dx, dy):\r
+        self.shiftX+=dx\r
+        self.shiftY+=dy\r
+\r
+    def rotate(self, head, pitch):\r
+        self.head+=head\r
+        self.pitch+=pitch\r
+\r
+    def updateProjection(self):\r
+        gluPerspective(30, self.aspect, self.n, self.f)\r
+\r
+    def updateView(self):\r
+        glTranslate(self.shiftX, self.shiftY, -self.distance)\r
+        glRotate(self.head, 0, 1, 0)\r
+        glRotate(self.pitch, 1, 0, 0)\r
+\r
+    def onMotion(self, x, y):\r
+        redraw=False\r
+        if self.isLeftDown:\r
+            self.dolly(y-self.y)\r
+            redraw=True\r
+        if self.isMiddelDown:\r
+            self.shift(x-self.x, self.y-y)\r
+            redraw=True\r
+        if self.isRightDown:\r
+            self.rotate(x-self.x, y-self.y)\r
+            redraw=True\r
+        self.x=x\r
+        self.y=y\r
+        return redraw\r
+\r
+    def onWheel(self, d):\r
+        if d!=0:\r
+            self.dolly(d)\r
+            return True\r
+\r