#!/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.distance*=0.9\r
\r
def shift(self, dx, dy):\r
- FACTOR=0.001\r
- self.shiftX+=dx * self.distance * FACTOR\r
- self.shiftY+=dy * self.distance * FACTOR\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
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
+ print(cx, cy)\r
+ self.shiftX=-cx/2.0\r
+ self.shiftY=-cy/2.0\r
+\r
self.vertices=numpy.array(self.vertices, 'f') \r
self.uvlist=numpy.array(self.uvlist, 'f') \r
\r
+ def get_boundingbox(self):\r
+ vertices_size=len(self.vertices)\r
+ if(vertices_size==0):\r
+ return ([0, 0, 0], [0, 0, 0])\r
+ print('vertices_size %d' % vertices_size)\r
+ print(self.vertices[0])\r
+ def vertex_gen_factory():\r
+ for i in range(0, vertices_size, 4):\r
+ yield [\r
+ self.vertices[i],\r
+ self.vertices[i+1],\r
+ self.vertices[i+2]\r
+ ]\r
+ vertex_gen=vertex_gen_factory()\r
+ v=next(vertex_gen)\r
+ max_v=v[:]\r
+ min_v=v[:]\r
+ for v in vertex_gen:\r
+ if v[0]<min_v[0]:\r
+ min_v[0]=v[0]\r
+ if v[1]<min_v[1]:\r
+ min_v[1]=v[1]\r
+ if v[2]<min_v[2]:\r
+ min_v[2]=v[2]\r
+ if v[0]>max_v[0]:\r
+ max_v[0]=v[0]\r
+ if v[1]>max_v[1]:\r
+ max_v[1]=v[1]\r
+ if v[2]>max_v[2]:\r
+ max_v[2]=v[2]\r
+ return (min_v, max_v)\r
+\r
if not io.read(path):\r
return\r
print(time.time()-t, "sec")\r
+ print(io)\r
# build\r
basedir=os.path.dirname(path)\r
indexedVertexArray=opengl.vertexarray.IndexedVertexArray()\r
menu_file.add_command(label='Open', under=0, command=self.onOpen)\r
\r
# setup opengl widget\r
- self.glworld=opengl.BaseController(opengl.rokuro.RokuroView(500))\r
+ self.view=opengl.rokuro.RokuroView()\r
+ self.glworld=opengl.BaseController(self.view)\r
self.glwidget=togl.Widget(self, self.glworld, width=width, height=height)\r
self.glwidget.pack(fill=tkinter.BOTH, expand=True)\r
\r
return\r
self.glworld.setRoot(model)\r
print('load %s' % path)\r
+ self.view.look_bb(*model.get_boundingbox())\r
self.glwidget.onDraw()\r
\r
def loadModel(self, path):\r