[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3932] contrib/py/scripts/addons/ io_scene_ms3d: add: exporter - bone ids and weights
Alexander Nussbaumer
alpha-beta-release at gmx.net
Mon Nov 5 23:10:36 CET 2012
Revision: 3932
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3932
Author: beta-tester
Date: 2012-11-05 22:10:31 +0000 (Mon, 05 Nov 2012)
Log Message:
-----------
add: exporter - bone ids and weights
Modified Paths:
--------------
contrib/py/scripts/addons/io_scene_ms3d/__README__.txt
contrib/py/scripts/addons/io_scene_ms3d/__init__.py
contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py
Modified: contrib/py/scripts/addons/io_scene_ms3d/__README__.txt
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__README__.txt 2012-11-05 18:07:54 UTC (rev 3931)
+++ contrib/py/scripts/addons/io_scene_ms3d/__README__.txt 2012-11-05 22:10:31 UTC (rev 3932)
@@ -95,13 +95,13 @@
.vertices
Ms3dVertex
.vertex: 100%
- .bone_id: 0%
- .reference_count: 0%
+ .bone_id: 100%
+ .reference_count: 100%
.flags: 0%
.vertex_ex
Ms3dVertexEx
- .bone_ids: 0%
- .weights: 0%
+ .bone_ids: 100%
+ .weights: 100%
.extra: 0%
.triangles
Ms3dTriangle
@@ -111,7 +111,7 @@
.group_index: 100%
.smoothing_group: 100%
.flags: 0%
- .vertex_normals: 80% (not tested yet)
+ .vertex_normals: 100%
.groups
Ms3dGroup
.name: 100%
Modified: contrib/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/__init__.py 2012-11-05 18:07:54 UTC (rev 3931)
+++ contrib/py/scripts/addons/io_scene_ms3d/__init__.py 2012-11-05 22:10:31 UTC (rev 3932)
@@ -23,7 +23,7 @@
'description': "Import / Export MilkShape3D MS3D files"\
" (conform with v1.8.4)",
'author': "Alexander Nussbaumer",
- 'version': (0, 4, 8, 3),
+ 'version': (0, 4, 8, 4),
'blender': (2, 6, 3, 0),
'location': "File > Import & File > Export",
'warning': "[2012-11-05] exporter is working, but is incomplete",
Modified: contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py
===================================================================
--- contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py 2012-11-05 18:07:54 UTC (rev 3931)
+++ contrib/py/scripts/addons/io_scene_ms3d/ms3d_export.py 2012-11-05 22:10:31 UTC (rev 3932)
@@ -188,12 +188,6 @@
###########################################################################
def from_blender(self, blender_context, ms3d_model):
- blender_mesh_objects = self.create_geometry(blender_context, ms3d_model)
- self.create_animation(blender_context, ms3d_model, blender_mesh_objects)
-
-
- ###########################################################################
- def create_geometry(self, blender_context, ms3d_model):
blender_mesh_objects = []
##EXPORT_ACTIVE_ONLY:
@@ -211,6 +205,14 @@
and blender_object.is_visible(blender_context.scene):
blender_mesh_objects.append(blender_object)
+ blender_to_ms3d_bones = {}
+
+ self.create_animation(blender_context, ms3d_model, blender_mesh_objects, blender_to_ms3d_bones)
+ self.create_geometry(blender_context, ms3d_model, blender_mesh_objects, blender_to_ms3d_bones)
+
+
+ ###########################################################################
+ def create_geometry(self, blender_context, ms3d_model, blender_mesh_objects, blender_to_ms3d_bones):
blender_scene = blender_context.scene
blender_to_ms3d_vertices = {}
@@ -291,6 +293,8 @@
else:
layer_uv = bm.loops.layers.uv.new(ms3d_str['OBJECT_LAYER_UV'])
+ layer_deform = bm.verts.layers.deform.active
+
##########################
# handle vertices
for bmv in bm.verts:
@@ -301,6 +305,34 @@
ms3d_vertex.__index = index
ms3d_vertex._vertex = (self.matrix_scaled_coordination_system \
* (bmv.co + blender_mesh_object.location))[:]
+
+ if layer_deform:
+ blender_vertex_group_ids = bmv[layer_deform]
+ if blender_vertex_group_ids:
+ temp_weight = 0
+ count = 0
+ for blender_index, blender_weight in blender_vertex_group_ids.items():
+ ms3d_joint = blender_to_ms3d_bones.get(
+ blender_mesh_object.vertex_groups[blender_index].name)
+ if ms3d_joint:
+ if count == 0:
+ ms3d_vertex.bone_id = ms3d_joint.__index
+ temp_weight = blender_weight
+ elif count == 1:
+ ms3d_vertex._vertex_ex_object.bone_ids[0] = ms3d_joint.__index
+ ms3d_vertex._vertex_ex_object.weights[0] = temp_weight * 100
+ ms3d_vertex._vertex_ex_object.weights[1] = blender_weight * 100
+ elif count == 2:
+ ms3d_vertex._vertex_ex_object.bone_ids[1] = ms3d_joint.__index
+ ms3d_vertex._vertex_ex_object.weights[2] = blender_weight * 100
+ #elif count == 3:
+ # ms3d_vertex._vertex_ex_object.bone_ids[2] = ms3d_joint.__index
+
+ # only first three weights will be supported
+ count+= 1
+ if count > 3:
+ break
+
ms3d_model._vertices.append(ms3d_vertex)
blender_to_ms3d_vertices[bmv] = ms3d_vertex
@@ -345,24 +377,25 @@
ms3d_triangle.smoothing_group = bmf[layer_smoothing_group]
ms3d_model._triangles.append(ms3d_triangle)
- ms3d_material = self.get_ms3d_material_add_if(blender_mesh, ms3d_model, blender_to_ms3d_materials, bmf.material_index)
+ ms3d_material = self.get_ms3d_material_add_if(blender_mesh, ms3d_model,
+ blender_to_ms3d_materials, bmf.material_index)
ms3d_group = blender_to_ms3d_groups.get(bmf[layer_group])
##EXPORT_ACTIVE_ONLY:
if ms3d_group is not None:
- if ms3d_group.material_index is None:
- if ms3d_material is None:
- ms3d_group.material_index = Ms3dSpec.DEFAULT_GROUP_MATERIAL_INDEX
+ if ms3d_material is None:
+ ms3d_group.material_index = Ms3dSpec.DEFAULT_GROUP_MATERIAL_INDEX
+ else:
+ if ms3d_group.material_index is None:
+ ms3d_group.material_index = ms3d_material.__index
else:
- ms3d_group.material_index = ms3d_material.__index
- else:
- if ms3d_material.__index != ms3d_group.material_index:
- ms3d_group = self.get_ms3d_group_by_material_add_if(ms3d_model, ms3d_material)
+ if ms3d_group.material_index != ms3d_material.__index:
+ ms3d_group = self.get_ms3d_group_by_material_add_if(ms3d_model, ms3d_material)
else:
if ms3d_material is not None:
ms3d_group = self.get_ms3d_group_by_material_add_if(ms3d_model, ms3d_material)
else:
- ms3d_group = self.get_ms3d_group_no_material_add_if(ms3d_model)
+ ms3d_group = self.get_ms3d_group_default_material_add_if(ms3d_model)
if ms3d_group is not None:
ms3d_group._triangle_indices.append(ms3d_triangle.__index)
@@ -388,25 +421,67 @@
# DEBUG:
#print("DEBUG: blender_mesh_object: {}".format(blender_mesh_object))
- return blender_mesh_objects
-
###########################################################################
- def create_animation(self, blender_context, ms3d_model, blender_mesh_objects):
+ def create_animation(self, blender_context, ms3d_model, blender_mesh_objects, blender_to_ms3d_bones):
##########################
# setup scene
blender_scene = blender_context.scene
ms3d_model.animation_fps = blender_scene.render.fps * blender_scene.render.fps_base
ms3d_model.number_total_frames = (blender_scene.frame_end - blender_scene.frame_start) + 1
- ms3d_model.current_time = (blender_scene.frame_current - blender_scene.frame_start) / (blender_scene.render.fps * blender_scene.render.fps_base)
+ ms3d_model.current_time = (blender_scene.frame_current - blender_scene.frame_start)\
+ / (blender_scene.render.fps * blender_scene.render.fps_base)
- pass
+ #return
+ ### not ready yet
+ for blender_mesh_object in blender_mesh_objects:
+ blender_bones = None
+ for blender_modifier in blender_mesh_object.modifiers:
+ if blender_modifier.type == 'ARMATURE' and blender_modifier.object.pose:
+ blender_bones = blender_modifier.object.pose.bones
+ break
+ for blender_bone_oject in blender_bones:
+ ms3d_joint = Ms3dJoint()
+ ms3d_joint.__index = len(ms3d_model._joints)
+ blender_ms3d_joint = blender_bone_oject.bone.ms3d
+ blender_bone = blender_bone_oject
+
+ if blender_ms3d_joint.name:
+ ms3d_joint.name = blender_ms3d_joint.name
+ else:
+ ms3d_joint.name = blender_bone.name
+
+ if blender_bone.parent:
+ if blender_ms3d_joint.name:
+ ms3d_joint.parent_name = blender_bone.parent.bone.ms3d.name
+ else:
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list