[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54677] trunk/blender/source/blender/ collada/DocumentImporter.cpp: fix #34049: Collada importer doesn' t import armature.

Gaia Clary gaia.clary at machinimatrix.org
Wed Feb 20 01:06:32 CET 2013


Revision: 54677
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54677
Author:   gaiaclary
Date:     2013-02-20 00:06:31 +0000 (Wed, 20 Feb 2013)
Log Message:
-----------
fix #34049: Collada importer doesn't import armature. Added support for 'rootless' armature similar to Maya.

Modified Paths:
--------------
    trunk/blender/source/blender/collada/DocumentImporter.cpp

Modified: trunk/blender/source/blender/collada/DocumentImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.cpp	2013-02-19 20:04:08 UTC (rev 54676)
+++ trunk/blender/source/blender/collada/DocumentImporter.cpp	2013-02-20 00:06:31 UTC (rev 54677)
@@ -252,8 +252,9 @@
 	for (std::vector<const COLLADAFW::VisualScene *>::iterator it = vscenes.begin(); it != vscenes.end(); it++) {
 		const COLLADAFW::NodePointerArray& roots = (*it)->getRootNodes();
 
-		for (unsigned int i = 0; i < roots.getCount(); i++)
+		for (unsigned int i = 0; i < roots.getCount(); i++) {
 			translate_anim_recursive(roots[i], NULL, NULL);
+		}
 	}
 
 	if (libnode_ob.size()) {
@@ -312,14 +313,20 @@
 #endif
 	unsigned int i;
 
+
 	//for (i = 0; i < 4; i++)
 	//    ob =
 	anim_importer.translate_Animations(node, root_map, object_map, FW_object_map);
 
-	COLLADAFW::NodePointerArray &children = node->getChildNodes();
-	for (i = 0; i < children.getCount(); i++) {
-		translate_anim_recursive(children[i], node, NULL);
+	if (node->getType() == COLLADAFW::Node::JOINT && par == NULL) {
+		translate_anim_recursive(node, node, parob);
 	}
+	else {
+		COLLADAFW::NodePointerArray &children = node->getChildNodes();
+		for (i = 0; i < children.getCount(); i++) {
+			translate_anim_recursive(children[i], node, NULL);
+		}
+	}
 }
 
 /** When this method is called, the writer must write the global document asset.
@@ -465,7 +472,18 @@
 			name.c_str());
 
 	if (is_joint) {
+		if (parent_node == NULL) {
+			par = bc_add_object(sce, OB_ARMATURE, std::string("Armature").c_str());
+			//anim_importer.read_node_transform(node, par);
+			objects_done->push_back(par);
+			object_map.insert(std::make_pair<COLLADAFW::UniqueId, Object *>(node->getUniqueId(), par));
+			node_map[node->getUniqueId()] = node;
+		}
 		armature_importer.add_joint(node, parent_node == NULL || parent_node->getType() != COLLADAFW::Node::JOINT, par, sce);
+
+		if (parent_node == NULL) {
+			return objects_done;
+		}
 	}
 	else {
 		COLLADAFW::InstanceGeometryPointerArray &geom = node->getInstanceGeometries();




More information about the Bf-blender-cvs mailing list