OSDN Git Service

add pymeshio.
[meshio/meshio.git] / swig / blender / mqo_import.py
index 1124a41..67603bd 100644 (file)
@@ -8,7 +8,7 @@ Tooltip: 'Import from Metasequoia file format (.mqo)'
 """\r
 __author__=['ousttrue']\r
 __url__ = ["http://gunload.web.fc2.com/blender/"]\r
-__version__= '0.6 2010/05/05'\r
+__version__= '2.0'\r
 __bpydoc__= '''\\r
 \r
 MQO Importer\r
@@ -23,13 +23,31 @@ This script imports a mqo into Blender for editing.
 0.7 20100606: integrate 2.4 and 2.5.\r
 0.8 20100619: fix multibyte object name.\r
 0.9 20100626: refactoring.\r
+2.0 20100724: update for Blender2.53.\r
+2.1 20100731: add full python module.\r
 '''\r
 \r
+bl_addon_info = {\r
+        'category': 'Import/Export',\r
+        'name': 'Import: Metasequioa Model Format (.mqo)',\r
+        'author': 'ousttrue',\r
+        'version': '2.0',\r
+        'blender': (2, 5, 3),\r
+        'location': 'File > Import',\r
+        'description': 'Import from the Metasequioa Model Format (.mqo)',\r
+        'warning': '', # used for warning icon and text in addons panel\r
+        'wiki_url': 'http://sourceforge.jp/projects/meshio/wiki/FrontPage',\r
+        }\r
+\r
 import os\r
 import sys\r
 \r
-# C extension\r
-from meshio import mqo\r
+try:\r
+    # C extension\r
+    from meshio import mqo\r
+except ImportError:\r
+    # full python\r
+    from pymeshio import mqo\r
 \r
 def isBlender24():\r
     return sys.version_info[0]<3\r
@@ -46,27 +64,39 @@ if isBlender24():
     def createMqoMaterial(m):\r
         material = Blender.Material.New(\r
                 m.getName().encode(bl.INTERNAL_ENCODING))\r
-        material.mode |= Blender.Material.Modes.SHADELESS\r
+        #material.mode |= Blender.Material.Modes.SHADELESS\r
+        # diffuse\r
         material.rgbCol = [m.color.r, m.color.g, m.color.b]\r
         material.alpha = m.color.a\r
-        material.amb = m.ambient\r
-        material.spec = m.specular\r
-        material.hard = int(255 * m.power)\r
+        # other\r
+        material.amb=m.ambient\r
+        material.spec=m.specular\r
+        material.hard=int(255 * m.power)\r
+        material.emit=m.emit\r
         return material\r
 \r
 else:\r
     # for 2.5\r
     import bpy\r
-    from bpy.props import *\r
 \r
     # wrapper\r
     import bl25 as bl\r
 \r
     def createMqoMaterial(m):\r
         material = bpy.data.materials.new(m.getName())\r
+        # shader\r
+        if m.shader==1:\r
+            material.diffuse_shader='FRESNEL'\r
+        else:\r
+            material.diffuse_shader='LAMBERT'\r
+        # diffuse\r
         material.diffuse_color=[m.color.r, m.color.g, m.color.b]\r
-        material.alpha=m.color.a\r
         material.diffuse_intensity=m.diffuse\r
+        material.alpha=m.color.a\r
+        # other\r
+        material.ambient = m.ambient\r
+        #material.specular = m.specular\r
+        material.emit=m.emit\r
         return material\r
 \r
 \r
@@ -144,9 +174,9 @@ def __createObjects(mqo, root, materials, imageMap, scale):
         if o.getName().startswith('sdef'):\r
             objects.append(mesh_object)\r
         elif o.getName().startswith('anchor'):\r
-            bl.object.layerMask(mesh_object, [0, 1])\r
+            bl.object.setLayerMask(mesh_object, [0, 1])\r
         elif o.getName().startswith('bone'):\r
-            bl.object.layerMask(mesh_object, [0, 1])\r
+            bl.object.setLayerMask(mesh_object, [0, 1])\r
 \r
         # geometry\r
         vertices=[(v.x * scale, -v.z * scale, v.y * scale) for v in o.vertices]\r
@@ -175,6 +205,7 @@ def __createObjects(mqo, root, materials, imageMap, scale):
         bl.mesh.addUV(mesh)\r
         for i, (f, face) in enumerate(zip(o.faces, mesh.faces)):\r
             uv_array=[]\r
+            # ToDo FIX\r
             # flip face\r
             for j in reversed(range(f.index_count)):\r
                 uv_array.append((f.getUV(j).x, 1.0-f.getUV(j).y))\r
@@ -186,7 +217,7 @@ def __createObjects(mqo, root, materials, imageMap, scale):
 \r
         # mirror modifier\r
         if o.mirror:\r
-            bl.object.addMirrorModifier(mesh_object)\r
+            bl.modifier.addMirror(mesh_object)\r
 \r
         # set smoothing\r
         bl.mesh.setSmooth(mesh, o.smoothing)\r
@@ -640,19 +671,11 @@ else:
 \r
         # List of operator properties, the attributes will be assigned\r
         # to the class instance from the operator settings before calling.\r
+        filepath = bpy.props.StringProperty()\r
+        filename = bpy.props.StringProperty()\r
+        directory = bpy.props.StringProperty()\r
 \r
-        path = StringProperty(\r
-                name="File Path", \r
-                description="File path used for importing the MQO file", \r
-                maxlen= 1024, default= "")\r
-        filename = StringProperty(\r
-                name="File Name", \r
-                description="Name of the file.")\r
-        directory = StringProperty(\r
-                name="Directory", \r
-                description="Directory of the file.")\r
-\r
-        scale = FloatProperty(\r
+        scale = bpy.props.FloatProperty(\r
                 name="Scale", \r
                 description="Scale the MQO by this value", \r
                 min=0.0001, max=1000000.0, \r
@@ -660,7 +683,7 @@ else:
 \r
         def execute(self, context):\r
             execute_25(\r
-                    self.properties.path, \r
+                    self.properties.filepath, \r
                     context.scene, \r
                     self.properties.scale)\r
             return 'FINISHED'\r
@@ -675,7 +698,9 @@ else:
     def menu_func(self, context): \r
         self.layout.operator(\r
                 IMPORT_OT_mqo.bl_idname, \r
-                text="Metasequoia (.mqo)")\r
+                text="Metasequoia (.mqo)",\r
+                icon='PLUGIN'\r
+                )\r
 \r
     def register():\r
         bpy.types.register(IMPORT_OT_mqo)\r