OSDN Git Service

fix bone group name.
[meshio/meshio.git] / swig / blender / mqo_export.py
index f135187..9b87a10 100644 (file)
@@ -161,15 +161,14 @@ class MqoExporter(object):
         # each material    \r
         io.write("Material %d {\r\n" % (len(self.materials)))\r
         for m in self.materials:\r
-            tex, aplane=bl.material.getTexturePath(m, dirname)\r
-            if len(tex):\r
-                # textureがある場合は下地を白に\r
-                io.write("\"%s\" shader(3) col(1 1 1 1)" % m.name)\r
-            else:\r
-                # 無い場合はそのまま\r
-                io.write(materialToMqo(m))\r
-            io.write(tex)\r
-            io.write(aplane)\r
+            io.write(materialToMqo(m))\r
+            # ToDo separated alpha texture\r
+            for filename in bl.material.eachTexturePath(m):\r
+                if len(dirname)>0 and filename.startswith(dirname):\r
+                    # 相対パスに変換する\r
+                    filename=filename[len(dirname)+1:]\r
+                io.write(" tex(\"%s\")" % filename)\r
+                break\r
             io.write("\r\n") \r
         # end of chunk\r
         io.write("}\r\n") \r
@@ -184,58 +183,64 @@ class MqoExporter(object):
             print(obj.type)\r
             return\r
 \r
-        ############################################################\r
-        # write\r
-        ############################################################\r
         io.write("Object \""+obj.name+"\" {\r\n")\r
 \r
         # depth\r
         io.write("\tdepth %d\r\n" % info.depth)\r
 \r
+        # mirror\r
         if bl.modifier.hasType(obj, 'MIRROR'):\r
                 io.write("\tmirror 1\r\n")\r
                 io.write("\tmirror_axis 1\r\n")\r
 \r
         if obj.type.upper()=='MESH':\r
             # duplicate and applyMatrix\r
-            mesh, dumy=bl.object.duplicate(obj)\r
-\r
-            # vertices\r
-            io.write("\tvertex %d {\r\n" % len(mesh.verts))\r
-            for vert in mesh.verts:\r
-                x, y, z = convert_to_mqo(vert.co)\r
-                io.write("\t\t%f %f %f\r\n" % \r
-                        (x*self.scale, y*self.scale, z*self.scale)) # rotate to y-up\r
-            io.write("\t}\r\n")\r
-\r
-            # faces\r
-            io.write("\tface %d {\r\n" % len(mesh.faces))\r
-            for i, face in enumerate(mesh.faces):\r
-                count=bl.face.getVertexCount(face)\r
-                # V\r
-                io.write("\t\t%d V(" % count)\r
-                for j in reversed(bl.face.getVertices(face)):\r
-                    io.write("%d " % j)\r
-                io.write(")")\r
-                # mat\r
-                if len(mesh.materials):\r
-                    io.write(" M(%d)" % \r
-                            info.material_map[bl.face.getMaterialIndex(face)])\r
-                # UV\r
-                if bl.mesh.hasUV(mesh) and bl.mesh.hasFaceUV(mesh, i, face):\r
-                    io.write(" UV(")\r
-                    for uv in reversed(bl.mesh.getFaceUV(mesh, i, face, count)):\r
-                        # reverse vertical value\r
-                        io.write("%f %f " % (uv[0], 1.0-uv[1])) \r
-                    io.write(")")\r
-                io.write("\r\n")\r
-            io.write("\t}\r\n") # end of faces\r
-\r
-            # 削除する\r
-            bl.object.delete(dumy)\r
+            copyMesh, copyObj=bl.object.duplicate(obj)\r
+            # apply transform\r
+            copyObj.scale=obj.scale\r
+            bpy.ops.object.scale_apply()\r
+            copyObj.rotation_euler=obj.rotation_euler\r
+            bpy.ops.object.rotation_apply()\r
+            copyObj.location=obj.location\r
+            bpy.ops.object.location_apply()\r
+            # write mesh\r
+            self.__write_mesh(io, copyMesh, info.material_map)\r
+            bl.object.delete(copyObj)\r
 \r
         io.write("}\r\n") # end of object\r
 \r
+    def __write_mesh(self, io, mesh, material_map):\r
+        # vertices\r
+        io.write("\tvertex %d {\r\n" % len(mesh.verts))\r
+        for vert in mesh.verts:\r
+            x, y, z = convert_to_mqo(vert.co)\r
+            io.write("\t\t%f %f %f\r\n" % \r
+                    (x*self.scale, y*self.scale, z*self.scale)) # rotate to y-up\r
+        io.write("\t}\r\n")\r
+\r
+        # faces\r
+        io.write("\tface %d {\r\n" % len(mesh.faces))\r
+        for i, face in enumerate(mesh.faces):\r
+            count=bl.face.getVertexCount(face)\r
+            # V\r
+            io.write("\t\t%d V(" % count)\r
+            for j in reversed(bl.face.getVertices(face)):\r
+                io.write("%d " % j)\r
+            io.write(")")\r
+            # mat\r
+            if len(mesh.materials):\r
+                io.write(" M(%d)" % \r
+                        material_map[bl.face.getMaterialIndex(face)])\r
+            # UV\r
+            if bl.mesh.hasUV(mesh) and bl.mesh.hasFaceUV(mesh, i, face):\r
+                io.write(" UV(")\r
+                for uv in reversed(bl.mesh.getFaceUV(mesh, i, face, count)):\r
+                    # reverse vertical value\r
+                    io.write("%f %f " % (uv[0], 1.0-uv[1])) \r
+                io.write(")")\r
+            io.write("\r\n")\r
+        io.write("\t}\r\n") # end of faces\r
+\r
 \r
 def __execute(filename, scene, scale=10):\r
     if not scene.objects.active:\r