diff --git a/io_import_scene_lwo.py b/io_import_scene_lwo.py index 3923e9d5630b0fe1b1bd39ae952e0a32014fb075..c02f7bca9945869af34f1234c7a438b0e669e461 100644 --- a/io_import_scene_lwo.py +++ b/io_import_scene_lwo.py @@ -29,7 +29,8 @@ bl_addon_info= { "warning": "", "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"\ "Scripts/File_I-O/LightWave_Object", - "tracker_url": "", + "tracker_url": "https://projects.blender.org/tracker/index.php?"\ + "func=detail&aid=23623&group_id=153&atid=469", "category": "Import/Export"} # Copyright (c) Ken Nign 2010 @@ -967,13 +968,12 @@ def build_armature(layer_data, bones): if skb_idx in layer_data.bone_rolls: xyz= layer_data.bone_rolls[skb_idx].split(' ') - vec= mathutils.Vector() - vec.x= float(xyz[0]) - vec.y= float(xyz[1]) - vec.z= float(xyz[2]) + vec= mathutils.Vector((float(xyz[0]), float(xyz[1]), float(xyz[2]))) quat= vec.to_track_quat('Y', 'Z') - nb.roll= quat.to_euler('XYZ')[2] * -1 - # XXX: This code may need a second look and test. + nb.roll= max(quat.to_euler('YZX')) + if nb.roll == 0.0: + nb.roll= min(quat.to_euler('YZX')) * -1 + # YZX order seems to produce the correct roll value. else: nb.roll= 0.0 @@ -1018,6 +1018,10 @@ def build_objects(object_layers, object_surfs, object_tags, object_name, add_sub else: print("Building %d Objects" % len(object_layers)) + # Before adding any meshes or armatures go into Object mode. + if bpy.ops.object.mode_set.poll(): + bpy.ops.object.mode_set(mode='OBJECT') + for layer_data in object_layers: me= bpy.data.meshes.new(layer_data.name) me.vertices.add(len(layer_data.pnts))