[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37663] trunk/blender/source/blender/ collada: Fix [#26821] Import Collada: instance_node still incorrectly handled
Nathan Letwory
nathan at letworyinteractive.com
Mon Jun 20 12:50:18 CEST 2011
Revision: 37663
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37663
Author: jesterking
Date: 2011-06-20 10:50:17 +0000 (Mon, 20 Jun 2011)
Log Message:
-----------
Fix [#26821] Import Collada: instance_node still incorrectly handled
reported by David Roy
patch submitted by Camillo Dell'mour
Modified Paths:
--------------
trunk/blender/source/blender/collada/DocumentImporter.cpp
trunk/blender/source/blender/collada/DocumentImporter.h
Modified: trunk/blender/source/blender/collada/DocumentImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.cpp 2011-06-20 10:28:37 UTC (rev 37662)
+++ trunk/blender/source/blender/collada/DocumentImporter.cpp 2011-06-20 10:50:17 UTC (rev 37663)
@@ -309,7 +309,7 @@
return ob;
}
-Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Node *source_node, COLLADAFW::Node *instance_node, Scene *sce, bool is_library_node)
+Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Node *source_node, COLLADAFW::Node *instance_node, Scene *sce, Object *par_ob, bool is_library_node)
{
Object *obn = copy_object(source_ob);
obn->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
@@ -353,10 +353,10 @@
Object *new_child = NULL;
if (inodes.getCount()) { // \todo loop through instance nodes
const COLLADAFW::UniqueId& id = inodes[0]->getInstanciatedObjectId();
- new_child = create_instance_node(object_map[id], node_map[id], child_node, sce, is_library_node);
+ new_child = create_instance_node(object_map[id], node_map[id], child_node, sce, NULL, is_library_node);
}
else {
- new_child = create_instance_node(object_map[child_id], child_node, NULL, sce, is_library_node);
+ new_child = create_instance_node(object_map[child_id], child_node, NULL, sce, NULL, is_library_node);
}
bc_set_parent(new_child, obn, mContext, true);
@@ -367,7 +367,12 @@
// when we have an instance_node, don't return the object, because otherwise
// its correct location gets overwritten in write_node(). Fixes bug #26012.
- if(instance_node) return NULL;
+ if(instance_node) {
+ if (par_ob && obn)
+ bc_set_parent(obn, par_ob, mContext);
+ return NULL;
+ }
+
else return obn;
}
@@ -385,11 +390,11 @@
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;
+ size_t geom_done = 0;
+ size_t camera_done = 0;
+ size_t lamp_done = 0;
+ size_t controller_done = 0;
+ size_t 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...
@@ -423,7 +428,7 @@
Object *source_ob = object_map[node_id];
COLLADAFW::Node *source_node = node_map[node_id];
- ob = create_instance_node(source_ob, source_node, node, sce, is_library_node);
+ ob = create_instance_node(source_ob, source_node, node, sce, par, is_library_node);
}
++inst_done;
}
Modified: trunk/blender/source/blender/collada/DocumentImporter.h
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.h 2011-06-20 10:28:37 UTC (rev 37662)
+++ trunk/blender/source/blender/collada/DocumentImporter.h 2011-06-20 10:50:17 UTC (rev 37663)
@@ -72,7 +72,7 @@
/** these should not be here */
Object* create_camera_object(COLLADAFW::InstanceCamera*, Scene*);
Object* create_lamp_object(COLLADAFW::InstanceLight*, Scene*);
- Object* create_instance_node(Object*, COLLADAFW::Node*, COLLADAFW::Node*, Scene*, bool);
+ Object* create_instance_node(Object*, COLLADAFW::Node*, COLLADAFW::Node*, Scene*, Object*, bool);
void write_node(COLLADAFW::Node*, COLLADAFW::Node*, Scene*, Object*, bool);
MTex* create_texture(COLLADAFW::EffectCommon*, COLLADAFW::Texture&, Material*, int, TexIndexTextureArrayMap&);
void write_profile_COMMON(COLLADAFW::EffectCommon*, Material*);
More information about the Bf-blender-cvs
mailing list