[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46246] trunk/blender/source/blender: Fix #31258: collada now selects newly added objects after import.
Brecht Van Lommel
brechtvanlommel at pandora.be
Thu May 3 23:32:50 CEST 2012
Revision: 46246
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46246
Author: blendix
Date: 2012-05-03 21:32:49 +0000 (Thu, 03 May 2012)
Log Message:
-----------
Fix #31258: collada now selects newly added objects after import.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_object.h
trunk/blender/source/blender/blenkernel/intern/object.c
trunk/blender/source/blender/blenkernel/intern/scene.c
trunk/blender/source/blender/collada/AnimationImporter.cpp
trunk/blender/source/blender/collada/ArmatureImporter.cpp
trunk/blender/source/blender/collada/DocumentImporter.cpp
trunk/blender/source/blender/collada/MeshImporter.cpp
trunk/blender/source/blender/collada/MeshImporter.h
trunk/blender/source/blender/collada/SkinInfo.cpp
trunk/blender/source/blender/collada/collada_utils.cpp
trunk/blender/source/blender/collada/collada_utils.h
trunk/blender/source/blender/editors/mesh/mesh_navmesh.c
Modified: trunk/blender/source/blender/blenkernel/BKE_object.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_object.h 2012-05-03 21:19:56 UTC (rev 46245)
+++ trunk/blender/source/blender/blenkernel/BKE_object.h 2012-05-03 21:32:49 UTC (rev 46246)
@@ -80,6 +80,7 @@
struct Object *add_only_object(int type, const char *name);
struct Object *add_object(struct Scene *scene, int type);
+void *add_obdata_from_type(int type);
struct Object *copy_object(struct Object *ob);
void make_local_object(struct Object *ob);
Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c 2012-05-03 21:19:56 UTC (rev 46245)
+++ trunk/blender/source/blender/blenkernel/intern/object.c 2012-05-03 21:32:49 UTC (rev 46246)
@@ -747,7 +747,7 @@
/* *************************************************** */
-static void *add_obdata_from_type(int type)
+void *add_obdata_from_type(int type)
{
switch (type) {
case OB_MESH: return add_mesh("Mesh");
@@ -792,6 +792,9 @@
{
Object *ob;
+ if(!name)
+ name = get_obdata_defname(type);
+
ob= alloc_libblock(&G.main->object, ID_OB, name);
/* default object vars */
@@ -880,6 +883,7 @@
ob->lay= scene->lay;
base= scene_add_base(scene, ob);
+ scene_deselect_all(scene);
scene_select_base(scene, base);
ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c 2012-05-03 21:19:56 UTC (rev 46245)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c 2012-05-03 21:32:49 UTC (rev 46246)
@@ -888,8 +888,6 @@
void scene_select_base(Scene *sce, Base *selbase)
{
- scene_deselect_all(sce);
-
selbase->flag |= SELECT;
selbase->object->flag= selbase->flag;
Modified: trunk/blender/source/blender/collada/AnimationImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/AnimationImporter.cpp 2012-05-03 21:19:56 UTC (rev 46245)
+++ trunk/blender/source/blender/collada/AnimationImporter.cpp 2012-05-03 21:32:49 UTC (rev 46246)
@@ -1770,10 +1770,8 @@
Object *AnimationImporter::get_joint_object(COLLADAFW::Node *root, COLLADAFW::Node *node, Object *par_job)
{
if (joint_objects.find(node->getUniqueId()) == joint_objects.end()) {
- Object *job = add_object(scene, OB_EMPTY);
+ Object *job = bc_add_object(scene, OB_EMPTY, (char*)get_joint_name(node));
- rename_id((ID*)&job->id, (char*)get_joint_name(node));
-
job->lay = object_in_scene(job, scene)->lay = 2;
mul_v3_fl(job->size, 0.5f);
Modified: trunk/blender/source/blender/collada/ArmatureImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ArmatureImporter.cpp 2012-05-03 21:19:56 UTC (rev 46245)
+++ trunk/blender/source/blender/collada/ArmatureImporter.cpp 2012-05-03 21:32:49 UTC (rev 46246)
@@ -367,7 +367,7 @@
{
if (empty) return empty;
- empty = add_object(scene, OB_EMPTY);
+ empty = bc_add_object(scene, OB_EMPTY, NULL);
empty->empty_drawtype = OB_EMPTY_SPHERE;
return empty;
@@ -412,7 +412,7 @@
if ( get_armature_for_joint(*ri) != NULL ) continue;
//add armature object for current joint
- //Object *ob_arm = add_object(scene, OB_ARMATURE);
+ //Object *ob_arm = bc_add_object(scene, OB_ARMATURE, NULL);
Object *ob_arm = joint_parent_map[(*ri)->getUniqueId()];
Modified: trunk/blender/source/blender/collada/DocumentImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.cpp 2012-05-03 21:19:56 UTC (rev 46245)
+++ trunk/blender/source/blender/collada/DocumentImporter.cpp 2012-05-03 21:32:49 UTC (rev 46246)
@@ -121,6 +121,9 @@
loader.registerExtraDataCallbackHandler(ehandler);
+ // deselect all to select new objects
+ scene_deselect_all(CTX_data_scene(mContext));
+
if (!root.loadDocument(mFilename)) {
fprintf(stderr, "COLLADAFW::Root::loadDocument() returned false on 1st pass\n");
return false;
@@ -144,6 +147,8 @@
delete ehandler;
+ mesh_importer.bmeshConversion();
+
return true;
}
@@ -157,7 +162,9 @@
// The latter sounds better.
}
-void DocumentImporter::start() {}
+void DocumentImporter::start()
+{
+}
void DocumentImporter::finish()
{
@@ -298,7 +305,8 @@
fprintf(stderr, "Couldn't find camera by UID.\n");
return NULL;
}
- Object *ob = add_object(sce, OB_CAMERA);
+
+ Object *ob = bc_add_object(sce, OB_CAMERA, NULL);
Camera *cam = uid_camera_map[cam_uid];
Camera *old_cam = (Camera*)ob->data;
ob->data = cam;
@@ -315,7 +323,8 @@
fprintf(stderr, "Couldn't find lamp by UID.\n");
return NULL;
}
- Object *ob = add_object(sce, OB_LAMP);
+
+ Object *ob = bc_add_object(sce, OB_LAMP, NULL);
Lamp *la = uid_lamp_map[lamp_uid];
Lamp *old_lamp = (Lamp*)ob->data;
ob->data = la;
@@ -398,7 +407,7 @@
if (is_joint) {
if ( par ) {
Object * empty = par;
- par = add_object(sce, OB_ARMATURE);
+ par = bc_add_object(sce, OB_ARMATURE, NULL);
bc_set_parent(par, empty->parent, mContext);
//remove empty : todo
object_map.insert(std::make_pair<COLLADAFW::UniqueId, Object *>(parent_node->getUniqueId(), par));
@@ -465,7 +474,7 @@
// if node is empty - create empty object
// XXX empty node may not mean it is empty object, not sure about this
if ( (geom_done + camera_done + lamp_done + controller_done + inst_done) < 1) {
- ob = add_object(sce, OB_EMPTY);
+ ob = bc_add_object(sce, OB_EMPTY, NULL);
objects_done->push_back(ob);
}
Modified: trunk/blender/source/blender/collada/MeshImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/MeshImporter.cpp 2012-05-03 21:19:56 UTC (rev 46245)
+++ trunk/blender/source/blender/collada/MeshImporter.cpp 2012-05-03 21:32:49 UTC (rev 46246)
@@ -727,6 +727,22 @@
MeshImporter::MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce) : unitconverter(unitconv), scene(sce), armature_importer(arm) {}
+void MeshImporter::bmeshConversion()
+{
+ for (std::map<COLLADAFW::UniqueId, Mesh*>::iterator m = uid_mesh_map.begin();
+ m != uid_mesh_map.end(); ++m)
+ {
+ if ((*m).second) {
+ Mesh *me = (*m).second;
+ BKE_mesh_convert_mfaces_to_mpolys(me);
+ BKE_mesh_tessface_clear(me);
+
+ mesh_calc_normals_mapping(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL);
+ }
+ }
+}
+
+
Object *MeshImporter::get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid)
{
if (uid_object_map.find(geom_uid) != uid_object_map.end())
@@ -839,10 +855,10 @@
for (it = prims.begin(); it != prims.end(); it++) {
Primitive& prim = *it;
- i = 0;
- while (i++ < prim.totface) {
- prim.mface->mat_nr = mat_index;
- prim.mface++;
+ MFace *mface = prim.mface;
+
+ for (i = 0; i < prim.totface; i++, mface++) {
+ mface->mat_nr = mat_index;
// bind texture images to faces
if (texture_face && (*color_texture)) {
texture_face->tpage = (Image*)(*color_texture)->tex->ima;
@@ -855,7 +871,6 @@
return texture_face;
}
-
Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::InstanceGeometry *geom,
bool isController,
std::map<COLLADAFW::UniqueId, Material*>& uid_material_map,
@@ -884,16 +899,16 @@
}
if (!uid_mesh_map[*geom_uid]) return NULL;
- Object *ob = add_object(scene, OB_MESH);
+ // name Object
+ const std::string& id = node->getName().size() ? node->getName() : node->getOriginalId();
+ const char *name = (id.length())? id.c_str(): NULL;
+
+ // add object
+ Object *ob = bc_add_object(scene, OB_MESH, name);
// store object pointer for ArmatureImporter
uid_object_map[*geom_uid] = ob;
- // name Object
- const std::string& id = node->getName().size() ? node->getName() : node->getOriginalId();
- if (id.length())
- rename_id(&ob->id, (char*)id.c_str());
-
// replace ob->data freeing the old one
Mesh *old_mesh = (Mesh*)ob->data;
@@ -963,10 +978,5 @@
make_edges(me, 0);
- BKE_mesh_convert_mfaces_to_mpolys(me);
- BKE_mesh_tessface_clear(me);
-
- mesh_calc_normals_mapping(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL);
-
return true;
}
Modified: trunk/blender/source/blender/collada/MeshImporter.h
===================================================================
--- trunk/blender/source/blender/collada/MeshImporter.h 2012-05-03 21:19:56 UTC (rev 46245)
+++ trunk/blender/source/blender/collada/MeshImporter.h 2012-05-03 21:32:49 UTC (rev 46246)
@@ -129,6 +129,8 @@
MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce);
+ void bmeshConversion();
+
virtual Object *get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid);
MTex *assign_textures_to_uvlayer(COLLADAFW::TextureCoordinateBinding &ctexture,
Modified: trunk/blender/source/blender/collada/SkinInfo.cpp
===================================================================
--- trunk/blender/source/blender/collada/SkinInfo.cpp 2012-05-03 21:19:56 UTC (rev 46245)
+++ trunk/blender/source/blender/collada/SkinInfo.cpp 2012-05-03 21:32:49 UTC (rev 46246)
@@ -151,7 +151,7 @@
// called from write_controller
Object *SkinInfo::create_armature(Scene *scene)
{
- ob_arm = add_object(scene, OB_ARMATURE);
+ ob_arm = bc_add_object(scene, OB_ARMATURE, NULL);
return ob_arm;
}
Modified: trunk/blender/source/blender/collada/collada_utils.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada_utils.cpp 2012-05-03 21:19:56 UTC (rev 46245)
+++ trunk/blender/source/blender/collada/collada_utils.cpp 2012-05-03 21:32:49 UTC (rev 46246)
@@ -34,6 +34,7 @@
#include "DNA_customdata_types.h"
#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
#include "BLI_math.h"
@@ -41,6 +42,7 @@
#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_object.h"
+#include "BKE_scene.h"
#include "WM_api.h" // XXX hrm, see if we can do without this
#include "WM_types.h"
@@ -110,3 +112,16 @@
return true;
}
+Object *bc_add_object(Scene *scene, int type, const char *name)
+{
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list