OSDN Git Service

fix import_mqo.py
[meshio/pymeshio.git] / examples / opengl / rokuro.py
index fd9eaff..e6b4c53 100644 (file)
@@ -1,25 +1,31 @@
 #!/usr/bin/python\r
 # coding: utf-8\r
 \r
+import math\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
+    def __init__(self):\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.SHIFT_FACTOR=0.001\r
+        self.distance=100\r
         self.shiftX=0\r
         self.shiftY=0\r
         self.aspect=1\r
         self.n=1\r
         self.f=10000\r
 \r
+    def __str__(self):\r
+        return '<RokuroView shiftX: %f, shiftY: %f, distance: %f>' % (\r
+                self.shiftX, self.shiftY, self.distance)\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
@@ -31,8 +37,8 @@ class RokuroView(baseview.BaseView):
             self.distance*=0.9\r
 \r
     def shift(self, dx, dy):\r
-        self.shiftX+=dx\r
-        self.shiftY+=dy\r
+        self.shiftX+=dx * self.distance * self.SHIFT_FACTOR\r
+        self.shiftY+=dy * self.distance * self.SHIFT_FACTOR\r
 \r
     def rotate(self, head, pitch):\r
         self.head+=head\r
@@ -66,3 +72,17 @@ class RokuroView(baseview.BaseView):
             self.dolly(d)\r
             return True\r
 \r
+    def look_bb(self, min_v, max_v):\r
+        w=max_v[0]-min_v[0]\r
+        h=max_v[1]-min_v[1]\r
+        long_side=max(w, h)\r
+        def deglee_to_radian(deglee):\r
+            return math.pi*deglee/180.0\r
+        d=long_side/math.tan(deglee_to_radian(30)) * 1.5\r
+        self.distance=min_v[2]+d\r
+        cx=min_v[0]+max_v[0]\r
+        cy=min_v[1]+max_v[1]\r
+        self.shiftX=-cx/2.0\r
+        self.shiftY=-cy/2.0\r
+        print(self)\r
+\r