[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33801] trunk/blender/source/blender: bugfix [#25310] Twice applied modifier with Convert to mesh with several multi-user objects
Campbell Barton
ideasman42 at gmail.com
Mon Dec 20 08:21:09 CET 2010
Revision: 33801
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33801
Author: campbellbarton
Date: 2010-12-20 08:21:08 +0100 (Mon, 20 Dec 2010)
Log Message:
-----------
bugfix [#25310] Twice applied modifier with Convert to mesh with several multi-user objects
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_library.h
trunk/blender/source/blender/editors/object/object_add.c
Modified: trunk/blender/source/blender/blenkernel/BKE_library.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_library.h 2010-12-20 05:26:25 UTC (rev 33800)
+++ trunk/blender/source/blender/blenkernel/BKE_library.h 2010-12-20 07:21:08 UTC (rev 33801)
@@ -88,6 +88,8 @@
/* use when "" is given to new_id() */
#define ID_FALLBACK_NAME "Untitled"
+#define IS_TAGGED(_id) ((_id) && (((ID *)_id)->flag & LIB_DOIT))
+
#ifdef __cplusplus
}
#endif
Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c 2010-12-20 05:26:25 UTC (rev 33800)
+++ trunk/blender/source/blender/editors/object/object_add.c 2010-12-20 07:21:08 UTC (rev 33801)
@@ -1091,8 +1091,8 @@
Nurb *nu;
MetaBall *mb;
Mesh *me;
- int target= RNA_enum_get(op->ptr, "target");
- int keep_original= RNA_boolean_get(op->ptr, "keep_original");
+ const short target= RNA_enum_get(op->ptr, "target");
+ const short keep_original= RNA_boolean_get(op->ptr, "keep_original");
int a, mballConverted= 0;
/* don't forget multiple users! */
@@ -1101,13 +1101,18 @@
CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
ob= base->object;
ob->flag &= ~OB_DONE;
+
+ /* flag data thats not been edited (only needed for !keep_original) */
+ if(ob->data) {
+ ((ID *)ob->data)->flag |= LIB_DOIT;
+ }
}
CTX_DATA_END;
CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
ob= base->object;
- if(ob->flag & OB_DONE) {
+ if(ob->flag & OB_DONE || !IS_TAGGED(ob->data)) {
if (ob->type != target) {
base->flag &= ~SELECT;
ob->flag &= ~SELECT;
@@ -1243,14 +1248,9 @@
curvetomesh(scene, newob);
}
}
- else if(ob->type==OB_MBALL) {
+ else if(ob->type==OB_MBALL && target == OB_MESH) {
Object *baseob;
- if (target != OB_MESH) {
- ob->flag |= OB_DONE;
- continue;
- }
-
base->flag &= ~SELECT;
ob->flag &= ~SELECT;
@@ -1292,12 +1292,13 @@
mballConverted= 1;
}
- else
- continue;
}
- else
+ else {
continue;
+ }
+ /* tag obdata if it was been changed */
+
/* If the original object is active then make this object active */
if(basen) {
if(ob == obact) {
@@ -1308,8 +1309,9 @@
basen= NULL;
}
- if (!keep_original) {
+ if (!keep_original && (ob->flag & OB_DONE)) {
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ ((ID *)ob->data)->flag &= ~LIB_DOIT; /* flag not to convert this datablock again */
}
/* delete original if needed */
More information about the Bf-blender-cvs
mailing list