from Blender import Mathutils\r
import bpy\r
\r
+ # wrapper\r
+ import bl24 as bl\r
+\r
# ファイルシステムの文字コード\r
# 改造版との共用のため\r
FS_ENCODING=sys.getfilesystemencoding()\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
+def has_mikoto(mqo):\r
+ return False\r
\r
+if isBlender24():\r
def create_materials(scene, mqo, directory):\r
"""\r
create blender materials and renturn material list.\r
else:\r
print("%s not exits" % path)\r
\r
- return materials\r
+ return materials, {}\r
\r
\r
- def create_objects(scene, root, mqo, materials):\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.use_alpha = True\r
return texture\r
\r
- def create_materials(mqo, scene, directory):\r
+ def create_materials(scene, mqo, directory):\r
materials = []\r
textureMap={}\r
imageMap={}\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 __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 material\r
- materials, imageMap=create_materials(\r
- io, scene, os.path.dirname(filename))\r
+ # create materials\r
+ materials, imageMap=create_materials(scene, io, os.path.dirname(filename))\r
\r
- # create group\r
- empty=bpy.data.objects.new(os.path.basename(filename), None)\r
- scene.objects.link(empty)\r
+ # create objects\r
+ root=bl.createEmptyObject(scene, os.path.basename(filename))\r
+ objects=create_objects(scene, io, root, materials, imageMap, scale)\r
\r
- # create mesh\r
- create_objects(io, scene, empty, 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(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
+ # 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