[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21788] branches/soc-2009-chingachgook/ source/blender/collada/DocumentImporter.cpp: Importer: fix parenting.

Arystanbek Dyussenov arystan.d at gmail.com
Wed Jul 22 05:51:12 CEST 2009


Revision: 21788
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21788
Author:   kazanbas
Date:     2009-07-22 05:51:11 +0200 (Wed, 22 Jul 2009)

Log Message:
-----------
Importer: fix parenting.

Modified Paths:
--------------
    branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp

Modified: branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp	2009-07-22 03:41:24 UTC (rev 21787)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp	2009-07-22 03:51:11 UTC (rev 21788)
@@ -39,6 +39,7 @@
 #include "BKE_texture.h"
 #include "ED_keyframing.h"
 #include "BKE_fcurve.h"
+#include "BKE_depsgraph.h"
 }
 #include "DNA_lamp_types.h"
 #include "BKE_mesh.h"
@@ -412,10 +413,10 @@
 		return ob;
 	}
 	
-	void write_node (COLLADAFW::Node *node, Scene *sce, Object *parent_ob = NULL)
+	void write_node (COLLADAFW::Node *node, Scene *sce, Object *par = NULL)
 	{
 		// XXX linking object with the first <instance_geometry>, though a node may have more of them...
-		// TODO: join multiple <instance_...> meshes into 1, and link object with it
+		// maybe join multiple <instance_...> meshes into 1, and link object with it? not sure...
 		if (node->getType() != COLLADAFW::Node::NODE) return;
 		
 		COLLADAFW::InstanceGeometryPointerArray &geom = node->getInstanceGeometries();
@@ -473,8 +474,24 @@
 		}
 		// just checking if object wasn't created
 		if (ob == NULL) return;
-		// if parent_ob was given make this object child of the previous 
-		if (parent_ob != NULL) ob->parent = parent_ob;
+		// if par was given make this object child of the previous 
+		if (par != NULL) {
+			Object workob;
+
+			ob->parent = par;
+
+			// doing what 'set parent' operator does
+			par->recalc |= OB_RECALC_OB;
+			ob->parsubstr[0] = 0;
+
+			// since ob->obmat is identity, this is not needed?
+			what_does_parent(sce, ob, &workob);
+			Mat4Invert(ob->parentinv, workob.obmat);
+
+			ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA;
+			ob->partype = PAROBJECT;
+			DAG_scene_sort(sce);
+		}
 		// transform Object
 		float rot[3][3];
 		Mat3One(rot);





More information about the Bf-blender-cvs mailing list