OSDN Git Service

implement createMaterials.
authorousttrue <ousttrue@gmail.com>
Sun, 6 Jun 2010 05:32:49 +0000 (14:32 +0900)
committerousttrue <ousttrue@gmail.com>
Sun, 6 Jun 2010 05:32:49 +0000 (14:32 +0900)
swig/blender/bl24.py [new file with mode: 0644]
swig/blender/bl25.py [new file with mode: 0644]
swig/blender/cp.py
swig/blender/mqo_import.py

diff --git a/swig/blender/bl24.py b/swig/blender/bl24.py
new file mode 100644 (file)
index 0000000..a9ee110
--- /dev/null
@@ -0,0 +1,39 @@
+# coding: utf-8
+import sys
+import os
+import Blender
+
+# \e$B%U%!%$%k%7%9%F%`$NJ8;z%3!<%I\e(B
+# \e$B2~B$HG$H$N6&MQ$N$?$a\e(B
+FS_ENCODING=sys.getfilesystemencoding()
+if os.path.exists(os.path.dirname(sys.argv[0])+"/utf8"):
+    INTERNAL_ENCODING='utf-8'
+else:
+    INTERNAL_ENCODING=FS_ENCODING
+
+def createEmptyObject(scene, name):
+    empty=scene.objects.new("Empty")
+    empty.setName(name)
+    return empty
+
+def createMaterial(m):
+    material = Blender.Material.New(m.getName().encode(INTERNAL_ENCODING))
+    material.mode |= Blender.Material.Modes.SHADELESS
+    material.rgbCol = [m.color.r, m.color.g, m.color.b]
+    material.alpha = m.color.a
+    material.amb = m.ambient
+    material.spec = m.specular
+    material.hard = int(255 * m.power)
+    return material
+
+def createTexture(path):
+    image = Blender.Image.Load(path.encode(INTERNAL_ENCODING))
+    texture = Blender.Texture.New(path.encode(INTERNAL_ENCODING))
+    texture.type = Blender.Texture.Types.IMAGE
+    texture.image = image
+    return texture, image
+
+def materialAddTexture(material, texture):
+    material.mode = material.mode | Blender.Material.Modes.TEXFACE
+    material.setTexture(0, texture, Blender.Texture.TexCo.UV)
+
diff --git a/swig/blender/bl25.py b/swig/blender/bl25.py
new file mode 100644 (file)
index 0000000..b8a1a50
--- /dev/null
@@ -0,0 +1,32 @@
+import bpy
+import os
+
+def createEmptyObject(scene, name):
+    empty=bpy.data.objects.new(name, None)
+    scene.objects.link(empty)
+    return empty
+
+def createMaterial(m):
+    material = bpy.data.materials.new(m.getName())
+    material.diffuse_color=[m.color.r, m.color.g, m.color.b]
+    material.alpha=m.color.a
+    material.diffuse_intensity=m.diffuse
+    # temporary
+    material.emit=1.0
+    return material
+
+def createTexture(path):
+    texture=bpy.data.textures.new(os.path.basename(path))
+    texture.type='IMAGE'
+    texture=texture.recast_type()
+    image=bpy.data.images.load(path)
+    texture.image=image
+    texture.mipmap = True
+    texture.interpolation = True
+    texture.use_alpha = True
+    return texture, image
+
+def materialAddTexture(material, texture):
+    #material.add_texture(texture, "UV", {"COLOR", "ALPHA"})
+    material.add_texture(texture, "UV", "COLOR")
+
index bac1057..a3b595e 100644 (file)
@@ -8,6 +8,7 @@ DST_24=[
 
 MAP_25={
         "mqo_import.py": "import_scene_mqo.py",
+        "bl25.py": "bl25.py",
         }
 
 DST_25=[
@@ -30,7 +31,7 @@ def copy25(src):
         try:
             dst="%s/%s" % (dst, MAP_25[src])
         except:
-            dst="%s/%s" % (dst, src)
+            continue
         print(dst)
         shutil.copy(src, dst)
 
index d83433e..038ddf0 100644 (file)
@@ -22,6 +22,8 @@ This script imports a mqo into Blender for editing.
 0.6 20100505: C extension.\r
 0.7 20100606: integrate 2.4 and 2.5.\r
 '''\r
+\r
+\r
 ###############################################################################\r
 # import\r
 ###############################################################################\r
@@ -43,14 +45,6 @@ if isBlender24():
 \r
     # wrapper\r
     import bl24 as bl\r
-\r
-    # ファイルシステムの文字コード\r
-    # 改造版との共用のため\r
-    FS_ENCODING=sys.getfilesystemencoding()\r
-    if os.path.exists(os.path.dirname(sys.argv[0])+"/utf8"):\r
-        INTERNAL_ENCODING='utf-8'\r
-    else:\r
-        INTERNAL_ENCODING=FS_ENCODING\r
 else:\r
     # for 2.5\r
     import bpy\r
@@ -67,51 +61,6 @@ def has_mikoto(mqo):
     return False\r
 \r
 if isBlender24():\r
-    def create_materials(scene, mqo, directory):\r
-        """\r
-        create blender materials and renturn material list.\r
-        """\r
-        materials = []\r
-        images = []\r
-        for m in mqo.materials:\r
-            material = Blender.Material.New(m.getName().encode(INTERNAL_ENCODING))\r
-            materials.append(material)\r
-\r
-            material.mode |= Blender.Material.Modes.SHADELESS\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
-            if m.texture!="":\r
-                texture_path=m.getTexture()\r
-\r
-                # load texture image\r
-                if os.path.isabs(texture_path):\r
-                    # absolute\r
-                    path = texture_path\r
-                else:\r
-                    # relative\r
-                    path = os.path.join(directory, texture_path)\r
-\r
-                # backslash to slash\r
-                #path = path.replace('\\', '/')\r
-\r
-                # texture\r
-                if os.path.exists(path):\r
-                    image = Blender.Image.Load(path.encode(INTERNAL_ENCODING))\r
-                    images.append(image)\r
-                    material.mode = material.mode | Blender.Material.Modes.TEXFACE\r
-                    tex = Blender.Texture.New(path.encode(INTERNAL_ENCODING))\r
-                    tex.type = Blender.Texture.Types.IMAGE\r
-                    tex.image = image\r
-                    material.setTexture(0, tex, Blender.Texture.TexCo.UV)\r
-                else:\r
-                    print("%s not exits" % path)\r
-                \r
-        return materials, {}\r
-\r
-\r
     def create_objects(scene, mqo, root, materials, imageMap=None, scale=None):\r
         """\r
         create blender mesh objects.\r
@@ -604,49 +553,6 @@ if isBlender24():
 \r
 \r
 else:\r
-    def create_texture(directory, texture_name):\r
-        texture=bpy.data.textures.new(texture_name)\r
-        texture.type='IMAGE'\r
-        texture=texture.recast_type()\r
-        #texturePath="%s/%s" % (directory, texture_name)\r
-        texturePath=os.path.join(directory, texture_name)\r
-        print('create_texture', texturePath)\r
-        image=bpy.data.images.load(texturePath)\r
-        texture.image=image\r
-        texture.mipmap = True\r
-        texture.interpolation = True\r
-        texture.use_alpha = True\r
-        return texture\r
-\r
-    def create_materials(scene, mqo, directory):\r
-        materials = []\r
-        textureMap={}\r
-        imageMap={}\r
-        if len(mqo.materials)>0:\r
-            for material_index, m in enumerate(mqo.materials):\r
-                material = bpy.data.materials.new(m.getName())\r
-                materials.append(material)\r
-                # mqo material\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
-                texture_name=m.getTexture()\r
-                if texture_name!='':\r
-                    if texture_name in textureMap:\r
-                        texture=textureMap[texture_name]\r
-                    else:\r
-                        texture=create_texture(directory, texture_name)\r
-                        textureMap[texture_name]=texture\r
-                        imageMap[material_index]=texture.image\r
-                    #material.add_texture(texture, "UV", {"COLOR", "ALPHA"})\r
-                    material.add_texture(texture, "UV", "COLOR")\r
-                    # temporary\r
-                    material.emit=1.0\r
-        else:\r
-            material = bpy.data.materials.new('Default')\r
-            materials.append(material)\r
-        return materials, imageMap\r
-\r
     def create_objects(scene, mqo, parent, materials, imageMap, scale):\r
         for o in mqo.objects:\r
 \r
@@ -736,6 +642,47 @@ else:
             mesh.update()\r
 \r
 \r
+def __createMaterials(scene, mqo, directory):\r
+    """\r
+    create blender materials and renturn material list.\r
+    """\r
+    materials = []\r
+    textureMap={}\r
+    imageMap={}\r
+    if len(mqo.materials)>0:\r
+        for material_index, m in enumerate(mqo.materials):\r
+            # material\r
+            material=bl.createMaterial(m)\r
+            materials.append(material)\r
+            # texture\r
+            texture_name=m.getTexture()\r
+            if texture_name!='':\r
+                if texture_name in textureMap:\r
+                    texture=textureMap[texture_name]\r
+                else:\r
+                    # load texture image\r
+                    if os.path.isabs(texture_name):\r
+                        # absolute\r
+                        path = texture_name\r
+                    else:\r
+                        # relative\r
+                        path = os.path.join(directory, texture_name)\r
+                    # texture\r
+                    if os.path.exists(path):\r
+                        print("create texture:", path)\r
+                        texture, image=bl.createTexture(path)\r
+                        textureMap[texture_name]=texture\r
+                        imageMap[material_index]=image\r
+                    else:\r
+                        print("%s not exits" % path)\r
+                        continue\r
+                bl.materialAddTexture(material, texture)\r
+    else:\r
+        # default material\r
+        pass\r
+    return materials, imageMap\r
+\r
+\r
 def __execute(filename, scene, scale=1.0):\r
     # parse file\r
     io=mqo.IO()\r
@@ -744,7 +691,7 @@ def __execute(filename, scene, scale=1.0):
         return\r
 \r
     # create materials\r
-    materials, imageMap=create_materials(scene, io, os.path.dirname(filename))\r
+    materials, imageMap=__createMaterials(scene, io, os.path.dirname(filename))\r
 \r
     # create objects\r
     root=bl.createEmptyObject(scene, os.path.basename(filename))\r
@@ -768,9 +715,9 @@ if isBlender24():
         """\r
         import a mqo file.\r
         """\r
-        filename=filename.decode(INTERNAL_ENCODING)\r
+        filename=filename.decode(bl.INTERNAL_ENCODING)\r
         print("##start mqo_import.py##")\r
-        print(INTERNAL_ENCODING, FS_ENCODING)\r
+        print(bl.INTERNAL_ENCODING, bl.FS_ENCODING)\r
         print("parse mqo file: %s" % (filename))\r
 \r
         Blender.Window.WaitCursor(1) \r