[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21478] branches/soc-2009-chingachgook/ source/blender/collada/DocumentImporter.cpp: Importer fixes:
Arystanbek Dyussenov
arystan.d at gmail.com
Fri Jul 10 10:43:37 CEST 2009
Revision: 21478
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21478
Author: kazanbas
Date: 2009-07-10 10:43:37 +0200 (Fri, 10 Jul 2009)
Log Message:
-----------
Importer fixes:
- remove empty meshes created by add_object call
- make_edges
- don't create a mesh object for non-mesh nodes
Modified Paths:
--------------
branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp
Modified: branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp 2009-07-10 08:05:13 UTC (rev 21477)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp 2009-07-10 08:43:37 UTC (rev 21478)
@@ -29,14 +29,15 @@
extern "C"
{
#include "BKE_main.h"
+#include "BKE_customdata.h"
+#include "BKE_library.h"
+}
#include "BKE_mesh.h"
-#include "BKE_customdata.h"
+#include "BKE_global.h"
#include "BKE_context.h"
#include "BKE_object.h"
#include "BKE_image.h"
#include "BKE_material.h"
-#include "BKE_library.h"
-}
#include "BLI_arithb.h"
@@ -277,17 +278,8 @@
continue;
}
- Object *ob = add_object(sce, OB_MESH);
+ // XXX linking object with the first <instance_geometry>, though a node may have more of them...
- const std::string& id = node->getOriginalId();
- if (id.length())
- rename_id(&ob->id, (char*)id.c_str());
-
-
- // XXX
- // linking object with the first <instance_geometry>
- // though a node may have more of them...
-
// TODO: join multiple <instance_geometry> meshes into 1, and link object with it
COLLADAFW::InstanceGeometryPointerArray &geom = node->getInstanceGeometries();
@@ -295,7 +287,14 @@
fprintf(stderr, "Node hasn't got any geometry.\n");
continue;
}
-
+
+ Object *ob = add_object(sce, OB_MESH);
+
+ const std::string& id = node->getOriginalId();
+ if (id.length())
+ rename_id(&ob->id, (char*)id.c_str());
+
+
const COLLADAFW::UniqueId& geom_uid = geom[0]->getInstanciatedObjectId();
if (uid_mesh_map.find(geom_uid) == uid_mesh_map.end()) {
// XXX report to user
@@ -304,8 +303,11 @@
fprintf(stderr, "Couldn't find a mesh by UID.\n");
continue;
}
-
+
+ // replace ob->data freeing the old one
+ Mesh *old_mesh = (Mesh*)ob->data;
set_mesh(ob, uid_mesh_map[geom_uid]);
+ if (old_mesh->id.us == 0) free_libblock(&G.main->mesh, old_mesh);
float rot[3][3];
Mat3One(rot);
@@ -657,8 +659,9 @@
geom_uid_mat_mapping_map[cgeom->getUniqueId()] = mat_prim_map;
- // normals
mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
+ make_edges(me, 0);
+
return true;
}
More information about the Bf-blender-cvs
mailing list