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*);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to