[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54856] trunk/blender/source/blender/ collada/ControllerExporter.cpp: fix: #34427: Collada export crash with armature

Gaia Clary gaia.clary at machinimatrix.org
Mon Feb 25 17:02:40 CET 2013


Revision: 54856
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54856
Author:   gaiaclary
Date:     2013-02-25 16:02:40 +0000 (Mon, 25 Feb 2013)
Log Message:
-----------
fix: #34427: Collada export crash with armature

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

Modified: trunk/blender/source/blender/collada/ControllerExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ControllerExporter.cpp	2013-02-25 15:51:53 UTC (rev 54855)
+++ trunk/blender/source/blender/collada/ControllerExporter.cpp	2013-02-25 16:02:40 UTC (rev 54856)
@@ -239,6 +239,7 @@
 				joint_index_by_def_index.push_back(-1);
 		}
 
+		int oob_counter = 0;
 		for (i = 0; i < me->totvert; i++) {
 			MDeformVert *vert = &me->dvert[i];
 			std::map<int, float> jw;
@@ -248,11 +249,18 @@
 
 			for (j = 0; j < vert->totweight; j++) {
 				int idx = vert->dw[j].def_nr;
-				if (idx >= 0) {
-					int joint_index = joint_index_by_def_index[idx];
-					if (joint_index != -1 && vert->dw[j].weight > 0.0f) {
-						jw[joint_index] += vert->dw[j].weight;
-						sumw += vert->dw[j].weight;
+				if (idx >= joint_index_by_def_index.size()) {
+					// XXX: Maybe better find out where and 
+					//      why the Out Of Bound indexes get created ?
+					oob_counter += 1;
+				}
+				else {
+					if (idx >= 0) {
+						int joint_index = joint_index_by_def_index[idx];
+						if (joint_index != -1 && vert->dw[j].weight > 0.0f) {
+							jw[joint_index] += vert->dw[j].weight;
+							sumw += vert->dw[j].weight;
+						}
 					}
 				}
 			}
@@ -274,6 +282,10 @@
 #endif
 			}
 		}
+
+		if (oob_counter > 0) {
+			fprintf(stderr, "Ignored %d Vertex weigths which use index to non existing VGroup.\n", oob_counter, joint_index_by_def_index.size());
+		}
 	}
 
 	std::string weights_source_id = add_weights_source(me, controller_id, weights);




More information about the Bf-blender-cvs mailing list