--- /dev/null
+#!/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