[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33112] trunk/blender/source/blender/ collada/DocumentImporter.cpp: Fix [#24592] COLLADA imports only one special node per type per node

Nathan Letwory nathan at letworyinteractive.com
Wed Nov 17 00:18:17 CET 2010


Revision: 33112
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33112
Author:   jesterking
Date:     2010-11-17 00:18:17 +0100 (Wed, 17 Nov 2010)

Log Message:
-----------
Fix [#24592] COLLADA imports only one special node per type per node
Reported and patched by Martijn Berger

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

Modified: trunk/blender/source/blender/collada/DocumentImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.cpp	2010-11-16 22:27:31 UTC (rev 33111)
+++ trunk/blender/source/blender/collada/DocumentImporter.cpp	2010-11-16 23:18:17 UTC (rev 33112)
@@ -375,27 +375,36 @@
 			COLLADAFW::InstanceLightPointerArray &lamp = node->getInstanceLights();
 			COLLADAFW::InstanceControllerPointerArray &controller = node->getInstanceControllers();
 			COLLADAFW::InstanceNodePointerArray &inst_node = node->getInstanceNodes();
+			int geom_done = 0;
+			int camera_done = 0;
+			int lamp_done = 0;
+			int controller_done = 0;
+			int inst_done = 0;
 
 			// XXX linking object with the first <instance_geometry>, though a node may have more of them...
 			// maybe join multiple <instance_...> meshes into 1, and link object with it? not sure...
 			// <instance_geometry>
-			if (geom.getCount() != 0) {
-				ob = mesh_importer.create_mesh_object(node, geom[0], false, uid_material_map,
+			while (geom_done < geom.getCount()) {
+				ob = mesh_importer.create_mesh_object(node, geom[geom_done], false, uid_material_map,
 													  material_texture_mapping_map);
+				++geom_done;
 			}
-			else if (camera.getCount() != 0) {
-				ob = create_camera_object(camera[0], sce);
+			while (camera_done < camera.getCount()) {
+				ob = create_camera_object(camera[camera_done], sce);
+				++camera_done;
 			}
-			else if (lamp.getCount() != 0) {
-				ob = create_lamp_object(lamp[0], sce);
+			while (lamp_done < lamp.getCount()) {
+				ob = create_lamp_object(lamp[lamp_done], sce);
+				++lamp_done;
 			}
-			else if (controller.getCount() != 0) {
-				COLLADAFW::InstanceGeometry *geom = (COLLADAFW::InstanceGeometry*)controller[0];
+			while (controller_done < controller.getCount()) {
+				COLLADAFW::InstanceGeometry *geom = (COLLADAFW::InstanceGeometry*)controller[controller_done];
 				ob = mesh_importer.create_mesh_object(node, geom, true, uid_material_map, material_texture_mapping_map);
+				++controller_done;
 			}
 			// XXX instance_node is not supported yet
-			else if (inst_node.getCount() != 0) {
-				const COLLADAFW::UniqueId& node_id = inst_node[0]->getInstanciatedObjectId();
+			while (inst_done < inst_node.getCount()) {
+				const COLLADAFW::UniqueId& node_id = inst_node[inst_done]->getInstanciatedObjectId();
 				if (object_map.find(node_id) == object_map.end()) {
 					fprintf(stderr, "Cannot find node to instanciate.\n");
 					ob = NULL;
@@ -406,10 +415,11 @@
 
 					ob = create_instance_node(source_ob, source_node, node, sce, is_library_node);
 				}
+				++inst_done;
 			}
 			// if node is empty - create empty object
 			// XXX empty node may not mean it is empty object, not sure about this
-			else {
+			if ( (geom_done + camera_done + lamp_done + controller_done + inst_done) < 1) {
 				ob = add_object(sce, OB_EMPTY);
 			}
 			





More information about the Bf-blender-cvs mailing list