From a3a35702b4fd8a3cf6873731d13eac288cf76fbc Mon Sep 17 00:00:00 2001 From: Sergey Lapin Date: Thu, 4 Sep 2014 16:53:38 +0400 Subject: [PATCH 1/3] Added shape keys export --- .../blender25/io_scene_dae/export_dae.py | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/tools/export/blender25/io_scene_dae/export_dae.py b/tools/export/blender25/io_scene_dae/export_dae.py index cd785fca400..a66bcbb5dff 100644 --- a/tools/export/blender25/io_scene_dae/export_dae.py +++ b/tools/export/blender25/io_scene_dae/export_dae.py @@ -315,12 +315,12 @@ class DaeExporter: return matid - def export_mesh(self,node,armature=None): + def export_mesh(self,node,armature=None,shapename=None): - if (node.data in self.mesh_cache): + if (node.data in self.mesh_cache) and shapename==None: return self.mesh_cache[mesh] - if (len(node.modifiers) and self.config["use_mesh_modifiers"]): + if (len(node.modifiers) and self.config["use_mesh_modifiers"]) or shapename!=None: mesh=node.to_mesh(self.scene,True,"RENDER") #is this allright? else: mesh=node.data @@ -427,9 +427,13 @@ class DaeExporter: indices.append(idx) - meshid = self.new_id("mesh") + if shapename != None: + meshid = self.new_id("mesh_"+shapename) + self.writel(S_GEOM,1,'') + else: + meshid = self.new_id("mesh") + self.writel(S_GEOM,1,'') - self.writel(S_GEOM,1,'') self.writel(S_GEOM,2,'') @@ -604,7 +608,7 @@ class DaeExporter: return meshdata - def export_mesh_node(self,node,il): + def export_mesh_node(self,node,il,shapename=None): if (node.data==None): return @@ -614,8 +618,7 @@ class DaeExporter: if (node.parent.type=="ARMATURE"): armature=node.parent - - meshdata = self.export_mesh(node,armature) + meshdata = self.export_mesh(node,armature,shapename) if (armature==None): self.writel(S_NODES,il,'') @@ -903,18 +906,21 @@ class DaeExporter: - def export_node(self,node,il): - + def export_node(self,node,il,shapename=None): if (not self.is_node_valid(node)): return + bpy.context.scene.objects.active = node - self.writel(S_NODES,il,'') + if shapename != None: + self.writel(S_NODES,il,'') + else: + self.writel(S_NODES,il,'') il+=1 self.writel(S_NODES,il,''+strmtx(node.matrix_local)+'') print("NODE TYPE: "+node.type+" NAME: "+node.name) if (node.type=="MESH"): - self.export_mesh_node(node,il) + self.export_mesh_node(node,il,shapename) elif (node.type=="CURVE"): self.export_curve_node(node,il) elif (node.type=="ARMATURE"): @@ -925,8 +931,20 @@ class DaeExporter: self.export_lamp_node(node,il) self.valid_nodes.append(node) - for x in node.children: - self.export_node(x,il) + if shapename==None: + for x in node.children: + self.export_node(x,il) + if node.type=="MESH": + for k in range(0,len(node.data.shape_keys.key_blocks)): + shape = node.data.shape_keys.key_blocks[k] + shape.value = 1.0 + node.active_shape_key_index = k + p = node.data + v = node.to_mesh(bpy.context.scene, True, "RENDER") + node.data = v + self.export_node(node,il,shape.name) + node.data = p + node.data.update() il-=1 self.writel(S_NODES,il,'') From c1227529150b4d9c862865c778b86930afcc4967 Mon Sep 17 00:00:00 2001 From: Sergey Lapin Date: Thu, 4 Sep 2014 17:05:28 +0400 Subject: [PATCH 2/3] Added option to enable and disable export of shape keys --- tools/export/blender25/io_scene_dae/__init__.py | 4 ++++ tools/export/blender25/io_scene_dae/export_dae.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/export/blender25/io_scene_dae/__init__.py b/tools/export/blender25/io_scene_dae/__init__.py index 39d8e94a538..fe8a383383b 100644 --- a/tools/export/blender25/io_scene_dae/__init__.py +++ b/tools/export/blender25/io_scene_dae/__init__.py @@ -126,6 +126,10 @@ class ExportDAE(bpy.types.Operator, ExportHelper): default=True, options={'HIDDEN'}, ) + export_shapekeys = BoolProperty( + name="Export Shape Keys", + default=False, + ) @property def check_extension(self): diff --git a/tools/export/blender25/io_scene_dae/export_dae.py b/tools/export/blender25/io_scene_dae/export_dae.py index a66bcbb5dff..6c4789c1524 100644 --- a/tools/export/blender25/io_scene_dae/export_dae.py +++ b/tools/export/blender25/io_scene_dae/export_dae.py @@ -934,7 +934,7 @@ class DaeExporter: if shapename==None: for x in node.children: self.export_node(x,il) - if node.type=="MESH": + if node.type=="MESH" and self.config["export_shapekeys"]: for k in range(0,len(node.data.shape_keys.key_blocks)): shape = node.data.shape_keys.key_blocks[k] shape.value = 1.0 From e0a75f0f12787167e4178cbe1a9527b80e2d7f76 Mon Sep 17 00:00:00 2001 From: Sergey Lapin Date: Thu, 4 Sep 2014 17:08:25 +0400 Subject: [PATCH 3/3] Recover shape key state --- tools/export/blender25/io_scene_dae/export_dae.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/export/blender25/io_scene_dae/export_dae.py b/tools/export/blender25/io_scene_dae/export_dae.py index 6c4789c1524..38c5c3b7237 100644 --- a/tools/export/blender25/io_scene_dae/export_dae.py +++ b/tools/export/blender25/io_scene_dae/export_dae.py @@ -937,6 +937,7 @@ class DaeExporter: if node.type=="MESH" and self.config["export_shapekeys"]: for k in range(0,len(node.data.shape_keys.key_blocks)): shape = node.data.shape_keys.key_blocks[k] + oldval = shape.value shape.value = 1.0 node.active_shape_key_index = k p = node.data @@ -945,6 +946,7 @@ class DaeExporter: self.export_node(node,il,shape.name) node.data = p node.data.update() + shape.value = oldval il-=1 self.writel(S_NODES,il,'')