[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58227] trunk/blender/source/blender/ collada: fix: #34823 Collada: nodes exporting world matrices

Gaia Clary gaia.clary at machinimatrix.org
Sun Jul 14 02:34:22 CEST 2013


Revision: 58227
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58227
Author:   gaiaclary
Date:     2013-07-14 00:34:21 +0000 (Sun, 14 Jul 2013)
Log Message:
-----------
fix: #34823 Collada: nodes exporting world matrices

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

Modified: trunk/blender/source/blender/collada/DocumentImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.cpp	2013-07-13 23:52:43 UTC (rev 58226)
+++ trunk/blender/source/blender/collada/DocumentImporter.cpp	2013-07-14 00:34:21 UTC (rev 58227)
@@ -601,11 +601,16 @@
 			anim_importer.read_node_transform(node, ob);  // overwrites location set earlier
 
 		if (!is_joint) {
-			// if par was given make this object child of the previous
-			if (par && ob)
-				bc_set_parent(ob, par, mContext);
+			if (par && ob) {
+				ob->parent = par;
+				ob->partype = PAROBJECT;
+				ob->parsubstr[0] = 0;
+
+				//bc_set_parent(ob, par, mContext, false);
+			}
 		}
 	}
+
 	// if node has child nodes write them
 	COLLADAFW::NodePointerArray &child_nodes = node->getChildNodes();
 
@@ -624,7 +629,7 @@
 }
 
 /** When this method is called, the writer must write the entire visual scene.
- * \return The writer should return true, if writing succeeded, false otherwise.*/
+ *  Return The writer should return true, if writing succeeded, false otherwise. */
 bool DocumentImporter::writeVisualScene(const COLLADAFW::VisualScene *visualScene)
 {
 	if (mImportStage != General)

Modified: trunk/blender/source/blender/collada/TransformWriter.cpp
===================================================================
--- trunk/blender/source/blender/collada/TransformWriter.cpp	2013-07-13 23:52:43 UTC (rev 58226)
+++ trunk/blender/source/blender/collada/TransformWriter.cpp	2013-07-14 00:34:21 UTC (rev 58227)
@@ -97,40 +97,27 @@
 
 	add_transform(node, loc, rot, scale);
 #endif
+
 	UnitConverter converter;
-	
-	/* Using parentinv should allow use of existing curves */
-	if (ob->parent) {
-		// If parentinv is identity don't add it.
-		bool add_parinv = false;
+	double d_obmat[4][4];
+	float  f_obmat[4][4];
 
-		for (int i = 0; i < 16; ++i) {
-			float f = (i % 4 == i / 4) ? 1.0f : 0.0f;
-			add_parinv |= (ob->parentinv[i % 4][i / 4] != f);
-		}
+	/* Export the local Matrix (relative to the object parent) */
+	BKE_object_matrix_local_get(ob, f_obmat);
+	converter.mat4_to_dae_double(d_obmat, f_obmat);
 
-		if (add_parinv) {
-			double dmat[4][4];
-			converter.mat4_to_dae_double(dmat, ob->parentinv);
-			node.addMatrix("parentinverse", dmat);
-		}
-	}
-
-	double d_obmat[4][4];	
-	converter.mat4_to_dae_double(d_obmat, ob->obmat);
-
 	switch (transformation_type) {
 		case BC_TRANSFORMATION_TYPE_MATRIX     : {
 			node.addMatrix("transform",d_obmat);
 			break;
 		}
-		case BC_TRANSFORMATION_TYPE_TRANSROTLOC: {
-			add_transform(node, ob->loc, ob->rot, ob->size); 
-			break;
-		}
 		case BC_TRANSFORMATION_TYPE_BOTH       : {
 			node.addMatrix("transform",d_obmat);
-			add_transform(node, ob->loc, ob->rot, ob->size);
+		}
+		case BC_TRANSFORMATION_TYPE_TRANSROTLOC: {
+			float loc[3], rot[3], scale[3];
+			TransformBase::decompose(f_obmat, loc, rot, NULL, scale);
+			add_transform(node, loc, rot, scale); 
 			break;
 		}
 	}




More information about the Bf-blender-cvs mailing list