--- /dev/null
+# 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)
+
0.6 20100505: C extension.\r
0.7 20100606: integrate 2.4 and 2.5.\r
'''\r
+\r
+\r
###############################################################################\r
# import\r
###############################################################################\r
\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
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
\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
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
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
"""\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