[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