0.6 20100505: C extension.\r
0.7 20100606: integrate 2.4 and 2.5.\r
'''\r
+\r
+\r
###############################################################################\r
# import\r
###############################################################################\r
from Blender import Mathutils\r
import bpy\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
+ # wrapper\r
+ import bl24 as bl\r
else:\r
# for 2.5\r
import bpy\r
from bpy.props import *\r
\r
+ # wrapper\r
+ import bl25 as bl\r
+\r
\r
###############################################################################\r
# implement\r
###############################################################################\r
-if isBlender24():\r
- def has_mikoto(mqo):\r
- return False\r
-\r
-\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
+def has_mikoto(mqo):\r
+ return False\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, root, mqo, materials):\r
+if isBlender24():\r
+ def create_objects(scene, mqo, root, materials, imageMap=None, scale=None):\r
"""\r
create blender mesh objects.\r
"""\r
mesh.update()\r
\r
\r
- def execute_24(filename):\r
- """\r
- import a mqo file.\r
- """\r
- filename=filename.decode(INTERNAL_ENCODING)\r
- print("##start mqo_import.py##")\r
- print(INTERNAL_ENCODING, FS_ENCODING)\r
- print("parse mqo file: %s" % (filename))\r
-\r
- Blender.Window.WaitCursor(1) \r
- t = Blender.sys.time() \r
-\r
- # parse file\r
- io=mqo.IO()\r
- \r
- if not io.read(filename):\r
- return\r
-\r
- # get active scene\r
- scene = Blender.Scene.GetCurrent()\r
-\r
- # create materials\r
- materials=create_materials(scene, io, os.path.dirname(filename))\r
- \r
- # create objects\r
- root=scene.objects.new("Empty")\r
- root.setName(os.path.basename(filename))\r
- objects=create_objects(scene, root, io, materials)\r
-\r
- if has_mikoto(io):\r
- # create mikoto bone\r
- armature_object=create_armature(scene, io)\r
- if armature_object:\r
- root.makeParent([armature_object])\r
-\r
- # create bone weight\r
- create_bone_weight(scene, io, armature_object, objects)\r
-\r
-\r
- print('finished in %.2f seconds' % (Blender.sys.time()-t))\r
- print('')\r
- Blender.Redraw()\r
- Blender.Window.WaitCursor(0) \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(mqo, scene, 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(mqo, scene, parent, materials, imageMap, scale):\r
+ def create_objects(scene, mqo, parent, materials, imageMap, scale):\r
for o in mqo.objects:\r
\r
# create mesh\r
\r
mesh.update()\r
\r
- def load(filename, context, scale):\r
- """\r
- load mqo file to context.\r
- """\r
- io=mqo.IO()\r
- if not io.read(filename):\r
- print("fail to load",filename)\r
- return\r
\r
- scene=context.scene\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
- # create material\r
- materials, imageMap=create_materials(\r
- io, scene, os.path.dirname(filename))\r
+def __execute(filename, scene, scale=1.0):\r
+ # parse file\r
+ io=mqo.IO()\r
+ if not io.read(filename):\r
+ print("fail to load",filename)\r
+ return\r
\r
- # create group\r
- empty=bpy.data.objects.new(os.path.basename(filename), None)\r
- scene.objects.link(empty)\r
+ # create materials\r
+ materials, imageMap=__createMaterials(scene, io, os.path.dirname(filename))\r
\r
- # create mesh\r
- create_objects(io, scene, empty, materials, imageMap, scale)\r
- \r
+ # create objects\r
+ root=bl.createEmptyObject(scene, os.path.basename(filename))\r
+ objects=create_objects(scene, io, root, materials, imageMap, scale)\r
+\r
+ if has_mikoto(io):\r
+ # create mikoto bone\r
+ armature_object=create_armature(scene, io)\r
+ if armature_object:\r
+ root.makeParent([armature_object])\r
+\r
+ # create bone weight\r
+ create_bone_weight(scene, io, armature_object, objects)\r
\r
+ \r
###############################################################################\r
# register\r
###############################################################################\r
if isBlender24():\r
+ def execute_24(filename):\r
+ """\r
+ import a mqo file.\r
+ """\r
+ filename=filename.decode(bl.INTERNAL_ENCODING)\r
+ print("##start mqo_import.py##")\r
+ print(bl.INTERNAL_ENCODING, bl.FS_ENCODING)\r
+ print("parse mqo file: %s" % (filename))\r
+\r
+ Blender.Window.WaitCursor(1) \r
+ t = Blender.sys.time() \r
+\r
+ # execute\r
+ scene = Blender.Scene.GetCurrent()\r
+ __execute(filename, scene)\r
+ scene.update(0)\r
+\r
+ print('finished in %.2f seconds' % (Blender.sys.time()-t))\r
+ print('')\r
+ Blender.Redraw()\r
+ Blender.Window.WaitCursor(0) \r
+\r
# for 2.4\r
# execute\r
Blender.Window.FileSelector(execute_24, 'Import MQO', '*.mqo')\r
else:\r
+ def execute_25(filename, context, scale):\r
+ """\r
+ import a mqo file.\r
+ """\r
+ __execute(filename, context.scene, scale)\r
+\r
# for 2.5\r
# import operator\r
class IMPORT_OT_mqo(bpy.types.Operator):\r
soft_min=0.001, soft_max=100.0, default=1.0)\r
\r
def execute(self, context):\r
- load(self.properties.path, context, self.properties.scale)\r
+ execute_25(self.properties.path, context, self.properties.scale)\r
return 'FINISHED'\r
\r
def invoke(self, context, event):\r