OSDN Git Service

fix import_mqo.py
[meshio/pymeshio.git] / examples / opengl / vertexarray.py
index 4dc51c3..b9dee7b 100644 (file)
@@ -2,6 +2,7 @@
 # coding: utf-8\r
 \r
 from OpenGL.GL import *\r
+import numpy\r
 \r
 '''\r
 頂点配列\r
@@ -60,6 +61,29 @@ class VertexArrayWithUV(object):
         glDisableClientState(GL_TEXTURE_COORD_ARRAY)\r
         glDisableClientState(GL_VERTEX_ARRAY)\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
+        def vertex_gen_factory():\r
+            for i in range(0, vertices_size, 3):\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
+            min_v[0]=min(min_v[0], v[0]) \r
+            min_v[1]=min(min_v[1], v[1]) \r
+            min_v[2]=min(min_v[2], v[2]) \r
+            max_v[0]=max(max_v[0], v[0]) \r
+            max_v[1]=max(max_v[1], v[1]) \r
+            max_v[2]=max(max_v[2], v[2]) \r
+        return (min_v, max_v)\r
 \r
 '''\r
 インデックス参照頂点配列\r
@@ -119,7 +143,38 @@ class IndexedVertexArray(object):
         glDisableClientState(GL_VERTEX_ARRAY)\r
 \r
     def optimize(self):\r
-        pass\r
-        #for v in self.vertexArrayMap.values():\r
-        #    v.vertices=numpy.array(v.vertices, 'f') \r
+        self.vertices=numpy.array(self.vertices, numpy.float32) \r
+        self.uvlist=numpy.array(self.uvlist, numpy.float32) \r
+        for m, indices in self.indicesMap.items():\r
+            self.indicesMap[m]=numpy.array(indices, numpy.uint32)\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
+        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