[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55465] trunk/blender/source/blender: py api: add Object.update_from_editmode(),
Campbell Barton
ideasman42 at gmail.com
Thu Mar 21 15:12:06 CET 2013
Revision: 55465
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55465
Author: campbellbarton
Date: 2013-03-21 14:12:04 +0000 (Thu, 21 Mar 2013)
Log Message:
-----------
py api: add Object.update_from_editmode(),
Useful for python exporters to avoid toggling editmode on export, moved into own function ED_object_editmode_load(obedit).
Modified Paths:
--------------
trunk/blender/source/blender/editors/include/ED_object.h
trunk/blender/source/blender/editors/io/io_collada.c
trunk/blender/source/blender/editors/object/object_bake.c
trunk/blender/source/blender/editors/object/object_edit.c
trunk/blender/source/blender/editors/render/render_internal.c
trunk/blender/source/blender/makesrna/intern/rna_object_api.c
trunk/blender/source/blender/windowmanager/intern/wm_files.c
Modified: trunk/blender/source/blender/editors/include/ED_object.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_object.h 2013-03-21 13:21:18 UTC (rev 55464)
+++ trunk/blender/source/blender/editors/include/ED_object.h 2013-03-21 14:12:04 UTC (rev 55465)
@@ -130,6 +130,7 @@
#define EM_IGNORE_LAYER 16
void ED_object_exit_editmode(struct bContext *C, int flag);
void ED_object_enter_editmode(struct bContext *C, int flag);
+bool ED_object_editmode_load(struct Object *obedit);
void ED_object_location_from_view(struct bContext *C, float loc[3]);
void ED_object_rotation_from_view(struct bContext *C, float rot[3]);
Modified: trunk/blender/source/blender/editors/io/io_collada.c
===================================================================
--- trunk/blender/source/blender/editors/io/io_collada.c 2013-03-21 13:21:18 UTC (rev 55464)
+++ trunk/blender/source/blender/editors/io/io_collada.c 2013-03-21 14:12:04 UTC (rev 55465)
@@ -127,7 +127,7 @@
second_life = RNA_boolean_get(op->ptr, "second_life");
/* get editmode results */
- ED_object_exit_editmode(C, 0); /* 0 = does not exit editmode */
+ ED_object_editmode_load(CTX_data_edit_object(C));
if (collada_export(CTX_data_scene(C),
filepath,
Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c 2013-03-21 13:21:18 UTC (rev 55464)
+++ trunk/blender/source/blender/editors/object/object_bake.c 2013-03-21 14:12:04 UTC (rev 55465)
@@ -572,7 +572,7 @@
bScreen *sc = CTX_wm_screen(C);
/* get editmode results */
- ED_object_exit_editmode(C, 0); /* 0 = does not exit editmode */
+ ED_object_editmode_load(CTX_data_edit_object(C));
bkr->sa = sc ? BKE_screen_find_big_area(sc, SPACE_IMAGE, 10) : NULL; /* can be NULL */
bkr->main = CTX_data_main(C);
Modified: trunk/blender/source/blender/editors/object/object_edit.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_edit.c 2013-03-21 13:21:18 UTC (rev 55464)
+++ trunk/blender/source/blender/editors/object/object_edit.c 2013-03-21 14:12:04 UTC (rev 55465)
@@ -312,29 +312,26 @@
/* ******************* toggle editmode operator ***************** */
-void ED_object_exit_editmode(bContext *C, int flag)
+/**
+ * Load EditMode data back into the object,
+ * optionally freeing the editmode data.
+ */
+static bool ED_object_editmode_load_ex(Object *obedit, const bool freedata)
{
- /* Note! only in exceptional cases should 'EM_DO_UNDO' NOT be in the flag */
+ if (obedit == NULL) {
+ return false;
+ }
- Scene *scene = CTX_data_scene(C);
- Object *obedit = CTX_data_edit_object(C);
- int freedata = flag & EM_FREEDATA;
-
- if (obedit == NULL) return;
-
- if (flag & EM_WAITCURSOR) waitcursor(1);
if (obedit->type == OB_MESH) {
Mesh *me = obedit->data;
-
-// if (EM_texFaceCheck())
-
+
if (me->edit_btmesh->bm->totvert > MESH_MAX_VERTS) {
error("Too many vertices");
- return;
+ return false;
}
-
+
EDBM_mesh_load(obedit);
-
+
if (freedata) {
EDBM_mesh_free(me->edit_btmesh);
MEM_freeN(me->edit_btmesh);
@@ -367,6 +364,29 @@
if (freedata) free_editMball(obedit);
}
+ return true;
+}
+
+bool ED_object_editmode_load(Object *obedit)
+{
+ return ED_object_editmode_load_ex(obedit, false);
+}
+
+void ED_object_exit_editmode(bContext *C, int flag)
+{
+ /* Note! only in exceptional cases should 'EM_DO_UNDO' NOT be in the flag */
+ /* Note! if 'EM_FREEDATA' isn't in the flag, use ED_object_editmode_load directly */
+ Scene *scene = CTX_data_scene(C);
+ Object *obedit = CTX_data_edit_object(C);
+ const bool freedata = (flag & EM_FREEDATA) != 0;
+
+ if (flag & EM_WAITCURSOR) waitcursor(1);
+
+ if (ED_object_editmode_load_ex(obedit, freedata) == false) {
+ if (flag & EM_WAITCURSOR) waitcursor(0);
+ return;
+ }
+
/* freedata only 0 now on file saves and render */
if (freedata) {
ListBase pidlist;
@@ -390,13 +410,13 @@
if (flag & EM_DO_UNDO)
ED_undo_push(C, "Editmode");
-
- if (flag & EM_WAITCURSOR) waitcursor(0);
-
+
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene);
obedit->mode &= ~OB_MODE_EDIT;
}
+
+ if (flag & EM_WAITCURSOR) waitcursor(0);
}
Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c 2013-03-21 13:21:18 UTC (rev 55464)
+++ trunk/blender/source/blender/editors/render/render_internal.c 2013-03-21 14:12:04 UTC (rev 55465)
@@ -542,7 +542,7 @@
BKE_sequencer_cache_cleanup();
/* get editmode results */
- ED_object_exit_editmode(C, 0); /* 0 = does not exit editmode */
+ ED_object_editmode_load(CTX_data_edit_object(C));
// store spare
// get view3d layer, local layer, make this nice api call to render
Modified: trunk/blender/source/blender/makesrna/intern/rna_object_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object_api.c 2013-03-21 13:21:18 UTC (rev 55464)
+++ trunk/blender/source/blender/makesrna/intern/rna_object_api.c 2013-03-21 14:12:04 UTC (rev 55465)
@@ -391,6 +391,14 @@
}
}
}
+
+static int rna_Object_update_from_editmode(Object *ob)
+{
+ if (ob->mode & OB_MODE_EDIT) {
+ return ED_object_editmode_load(ob);
+ }
+ return false;
+}
#endif /* NDEBUG */
#else /* RNA_RUNTIME */
@@ -567,6 +575,11 @@
RNA_def_property_flag(parm, PROP_THICK_WRAP); /* needed for string return value */
RNA_def_function_output(func, parm);
#endif /* NDEBUG */
+
+ func = RNA_def_function(srna, "update_from_editmode", "rna_Object_update_from_editmode");
+ RNA_def_function_ui_description(func, "Load the objects edit-mode data intp the object data");
+ parm = RNA_def_boolean(func, "result", 0, "", "Success");
+ RNA_def_function_return(func, parm);
}
Modified: trunk/blender/source/blender/windowmanager/intern/wm_files.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_files.c 2013-03-21 13:21:18 UTC (rev 55464)
+++ trunk/blender/source/blender/windowmanager/intern/wm_files.c 2013-03-21 14:12:04 UTC (rev 55465)
@@ -829,8 +829,8 @@
if (G.fileflags & G_AUTOPACK) {
packAll(G.main, reports);
}
-
- ED_object_exit_editmode(C, EM_DO_UNDO);
+
+ ED_object_editmode_load(CTX_data_edit_object(C));
ED_sculpt_force_update(C);
/* don't forget not to return without! */
More information about the Bf-blender-cvs
mailing list