[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55491] trunk/blender/source/blender/ editors/mesh/editmesh_tools.c: fix error with merge operator not handing error cases properly ( errors wouldn't cancel the operator as they should).

Campbell Barton ideasman42 at gmail.com
Fri Mar 22 05:39:45 CET 2013


Revision: 55491
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55491
Author:   campbellbarton
Date:     2013-03-22 04:39:43 +0000 (Fri, 22 Mar 2013)
Log Message:
-----------
fix error with merge operator not handing error cases properly (errors wouldn't cancel the operator as they should).
was mixing up OPERATOR_CANCELLED with 0.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-03-22 03:25:31 UTC (rev 55490)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-03-22 04:39:43 UTC (rev 55491)
@@ -96,10 +96,10 @@
 {
 	Object *obedit = CTX_data_edit_object(C);
 	BMEditMesh *em = BMEdit_FromObject(obedit);
-	int cuts = RNA_int_get(op->ptr, "number_cuts");
+	const int cuts = RNA_int_get(op->ptr, "number_cuts");
 	float smooth = 0.292f * RNA_float_get(op->ptr, "smoothness");
-	float fractal = RNA_float_get(op->ptr, "fractal") / 2.5f;
-	float along_normal = RNA_float_get(op->ptr, "fractal_along_normal");
+	const float fractal = RNA_float_get(op->ptr, "fractal") / 2.5f;
+	const float along_normal = RNA_float_get(op->ptr, "fractal_along_normal");
 
 	if (RNA_boolean_get(op->ptr, "quadtri") && 
 	    RNA_enum_get(op->ptr, "quadcorner") == SUBD_STRAIGHT_CUT)
@@ -167,7 +167,7 @@
 	BMEditMesh *em = BMEdit_FromObject(obedit);
 	BMOperator bmop;
 
-	int iterations = RNA_int_get(op->ptr, "iterations");
+	const int iterations = RNA_int_get(op->ptr, "iterations");
 
 	EDBM_op_init(em, &bmop, op,
 	             "unsubdivide verts=%hv iterations=%i", BM_ELEM_SELECT, iterations);
@@ -435,9 +435,9 @@
 	BMEditMesh *em = BMEdit_FromObject(obedit);
 	RegionView3D *rv3d = CTX_wm_region_view3d(C);
 		
-	int steps = RNA_int_get(op->ptr, "steps");
+	const int steps = RNA_int_get(op->ptr, "steps");
 	
-	float offs = RNA_float_get(op->ptr, "offset");
+	const float offs = RNA_float_get(op->ptr, "offset");
 	float dvec[3], tmat[3][3], bmat[3][3], nor[3] = {0.0, 0.0, 0.0};
 	short a;
 
@@ -705,7 +705,7 @@
 {
 	Object *obedit = CTX_data_edit_object(C);
 	BMEditMesh *em = BMEdit_FromObject(obedit);
-	int action = RNA_enum_get(op->ptr, "action");
+	const int action = RNA_enum_get(op->ptr, "action");
 	
 	switch (action) {
 		case SEL_TOGGLE:
@@ -805,7 +805,7 @@
 
 	/* call extrude? */
 	if (done) {
-		const short rot_src = RNA_boolean_get(op->ptr, "rotate_source");
+		const bool rot_src = RNA_boolean_get(op->ptr, "rotate_source");
 		BMEdge *eed;
 		float vec[3], cent[3], mat[3][3];
 		float nor[3] = {0.0, 0.0, 0.0};
@@ -971,7 +971,7 @@
 {
 	Object *obedit = CTX_data_edit_object(C);
 	BMEditMesh *em = BMEdit_FromObject(obedit);
-	int type = RNA_enum_get(op->ptr, "type");
+	const int type = RNA_enum_get(op->ptr, "type");
 
 	if (type == 0) {
 		if (!EDBM_op_callf(em, op, "delete geom=%hv context=%i", BM_ELEM_SELECT, DEL_VERTS)) /* Erase Vertices */
@@ -1308,7 +1308,7 @@
 	BMesh *bm = em->bm;
 	BMEdge *eed;
 	BMIter iter;
-	int clear = RNA_boolean_get(op->ptr, "clear");
+	const bool clear = RNA_boolean_get(op->ptr, "clear");
 	
 	/* auto-enable seams drawing */
 	if (clear == 0) {
@@ -1362,7 +1362,7 @@
 	BMesh *bm = em->bm;
 	BMEdge *eed;
 	BMIter iter;
-	int clear = RNA_boolean_get(op->ptr, "clear");
+	const bool clear = RNA_boolean_get(op->ptr, "clear");
 
 	/* auto-enable sharp edge drawing */
 	if (clear == 0) {
@@ -1578,7 +1578,7 @@
 	BMOperator bmop;
 	BMEdge *eed;
 	BMIter iter;
-	const int use_ccw = RNA_boolean_get(op->ptr, "use_ccw");
+	const bool use_ccw = RNA_boolean_get(op->ptr, "use_ccw");
 	int tot = 0;
 
 	if (em->bm->totedgesel == 0) {
@@ -1752,9 +1752,9 @@
 	int i, repeat;
 	float clip_dist = 0.0f;
 
-	int xaxis = RNA_boolean_get(op->ptr, "xaxis");
-	int yaxis = RNA_boolean_get(op->ptr, "yaxis");
-	int zaxis = RNA_boolean_get(op->ptr, "zaxis");
+	const bool xaxis = RNA_boolean_get(op->ptr, "xaxis");
+	const bool yaxis = RNA_boolean_get(op->ptr, "yaxis");
+	const bool zaxis = RNA_boolean_get(op->ptr, "zaxis");
 
 	/* mirror before smooth */
 	if (((Mesh *)obedit->data)->editflag & ME_EDIT_MIRROR_X) {
@@ -1988,7 +1988,7 @@
 	BMOperator bmop;
 
 	/* get the direction from RNA */
-	const int use_ccw = RNA_boolean_get(op->ptr, "use_ccw");
+	const bool use_ccw = RNA_boolean_get(op->ptr, "use_ccw");
 
 	/* initialize the bmop using EDBM api, which does various ui error reporting and other stuff */
 	EDBM_op_init(em, &bmop, op, "rotate_uvs faces=%hf use_ccw=%b", BM_ELEM_SELECT, use_ccw);
@@ -2037,7 +2037,7 @@
 	BMOperator bmop;
 
 	/* get the direction from RNA */
-	const int use_ccw = RNA_boolean_get(op->ptr, "use_ccw");
+	const bool use_ccw = RNA_boolean_get(op->ptr, "use_ccw");
 
 	/* initialize the bmop using EDBM api, which does various ui error reporting and other stuff */
 	EDBM_op_init(em, &bmop, op, "rotate_colors faces=%hf use_ccw=%b", BM_ELEM_SELECT, use_ccw);
@@ -2155,7 +2155,7 @@
 }
 
 
-static int merge_firstlast(BMEditMesh *em, int first, int uvmerge, wmOperator *wmop)
+static bool merge_firstlast(BMEditMesh *em, const bool use_first, const bool use_uvmerge, wmOperator *wmop)
 {
 	BMVert *mergevert;
 	BMEditSelection *ese;
@@ -2165,44 +2165,44 @@
 	 */
 
 	/* do sanity check in mergemenu in edit.c ?*/
-	if (first == 0) {
+	if (use_first == false) {
 		if (!em->bm->selected.last || ((BMEditSelection *)em->bm->selected.last)->htype != BM_VERT)
-			return OPERATOR_CANCELLED;
+			return false;
 
 		ese = em->bm->selected.last;
 		mergevert = (BMVert *)ese->ele;
 	}
 	else {
 		if (!em->bm->selected.first || ((BMEditSelection *)em->bm->selected.first)->htype != BM_VERT)
-			return OPERATOR_CANCELLED;
+			return false;
 
 		ese = em->bm->selected.first;
 		mergevert = (BMVert *)ese->ele;
 	}
 
 	if (!BM_elem_flag_test(mergevert, BM_ELEM_SELECT))
-		return OPERATOR_CANCELLED;
+		return false;
 	
-	if (uvmerge) {
+	if (use_uvmerge) {
 		if (!EDBM_op_callf(em, wmop, "pointmerge_facedata verts=%hv vert_snap=%e", BM_ELEM_SELECT, mergevert))
-			return OPERATOR_CANCELLED;
+			return false;
 	}
 
 	if (!EDBM_op_callf(em, wmop, "pointmerge verts=%hv merge_co=%v", BM_ELEM_SELECT, mergevert->co))
-		return OPERATOR_CANCELLED;
+		return false;
 
-	return OPERATOR_FINISHED;
+	return true;
 }
 
-static int merge_target(BMEditMesh *em, Scene *scene, View3D *v3d, Object *ob, 
-                        int target, int uvmerge, wmOperator *wmop)
+static bool merge_target(BMEditMesh *em, Scene *scene, View3D *v3d, Object *ob,
+                         const bool use_cursor, const bool use_uvmerge, wmOperator *wmop)
 {
 	BMIter iter;
 	BMVert *v;
 	float co[3], cent[3] = {0.0f, 0.0f, 0.0f};
 	const float *vco = NULL;
 
-	if (target) {
+	if (use_cursor) {
 		vco = give_cursor(scene, v3d);
 		copy_v3_v3(co, vco);
 		mul_m4_v3(ob->imat, co);
@@ -2218,7 +2218,7 @@
 		}
 		
 		if (!i)
-			return OPERATOR_CANCELLED;
+			return false;
 
 		fac = 1.0f / (float)i;
 		mul_v3_fl(cent, fac);
@@ -2227,17 +2227,17 @@
 	}
 
 	if (!vco)
-		return OPERATOR_CANCELLED;
+		return false;
 	
-	if (uvmerge) {
+	if (use_uvmerge) {
 		if (!EDBM_op_callf(em, wmop, "average_vert_facedata verts=%hv", BM_ELEM_SELECT))
-			return OPERATOR_CANCELLED;
+			return false;
 	}
 
 	if (!EDBM_op_callf(em, wmop, "pointmerge verts=%hv merge_co=%v", BM_ELEM_SELECT, co))
-		return OPERATOR_CANCELLED;
+		return false;
 
-	return OPERATOR_FINISHED;
+	return true;
 }
 
 static int edbm_merge_exec(bContext *C, wmOperator *op)
@@ -2246,30 +2246,35 @@
 	View3D *v3d = CTX_wm_view3d(C);
 	Object *obedit = CTX_data_edit_object(C);
 	BMEditMesh *em = BMEdit_FromObject(obedit);
-	int status = 0, uvs = RNA_boolean_get(op->ptr, "uvs");
+	const int type = RNA_enum_get(op->ptr, "type");
+	const bool uvs = RNA_boolean_get(op->ptr, "uvs");
+	bool ok = false;
 
-	switch (RNA_enum_get(op->ptr, "type")) {
+	switch (type) {
 		case 3:
-			status = merge_target(em, scene, v3d, obedit, 0, uvs, op);
+			ok = merge_target(em, scene, v3d, obedit, false, uvs, op);
 			break;
 		case 4:
-			status = merge_target(em, scene, v3d, obedit, 1, uvs, op);
+			ok = merge_target(em, scene, v3d, obedit, true, uvs, op);
 			break;
 		case 1:
-			status = merge_firstlast(em, 0, uvs, op);
+			ok = merge_firstlast(em, false, uvs, op);
 			break;
 		case 6:
-			status = merge_firstlast(em, 1, uvs, op);
+			ok = merge_firstlast(em, true, uvs, op);
 			break;
 		case 5:
-			status = 1;
+			ok = true;
 			if (!EDBM_op_callf(em, op, "collapse edges=%he", BM_ELEM_SELECT))
-				status = 0;
+				ok = false;
 			break;
+		default:
+			BLI_assert(0);
 	}
 
-	if (!status)
+	if (!ok) {
 		return OPERATOR_CANCELLED;
+	}
 
 	EDBM_update_generic(em, true, true);
 
@@ -2355,8 +2360,8 @@
 	BMEditMesh *em = BMEdit_FromObject(obedit);
 	BMOperator bmop;
 	const float threshold = RNA_float_get(op->ptr, "threshold");
-	int use_unselected = RNA_boolean_get(op->ptr, "use_unselected");
-	int totvert_orig = em->bm->totvert;
+	const bool use_unselected = RNA_boolean_get(op->ptr, "use_unselected");
+	const int totvert_orig = em->bm->totvert;
 	int count;
 
 	if (use_unselected) {
@@ -2438,7 +2443,7 @@
 	BMEditSelection *sv, *ev;
 
 	/* get the type from RNA */
-	int type = RNA_enum_get(op->ptr, "type");
+	const int type = RNA_enum_get(op->ptr, "type");
 
 	/* first try to find vertices in edit selection */
 	sv = em->bm->selected.last;
@@ -2606,11 +2611,12 @@
 	BMVert *eve;
 	BMIter iter;
 	float co[3], *sco;
-	float blend = RNA_float_get(op->ptr, "blend");
-	int shape = RNA_enum_get(op->ptr, "shape");
-	int add = RNA_boolean_get(op->ptr, "add");
 	int totshape;
 
+	const float blend = RNA_float_get(op->ptr, "blend");
+	const int shape = RNA_enum_get(op->ptr, "shape");
+	const bool use_add = RNA_boolean_get(op->ptr, "add");
+
 	/* sanity check */
 	totshape = CustomData_number_of_layers(&em->bm->vdata, CD_SHAPEKEY);
 	if (totshape == 0 || shape < 0 || shape >= totshape)
@@ -2630,7 +2636,7 @@
 		sco = CustomData_bmesh_get_n(&em->bm->vdata, eve->head.data, CD_SHAPEKEY, shape);
 		copy_v3_v3(co, sco);
 		
-		if (add) {
+		if (use_add) {
 			/* in add mode, we add relative shape key offset */
 			if (kb) {
 				float *rco = CustomData_bmesh_get_n(&em->bm->vdata, eve->head.data, CD_SHAPEKEY, kb->relative);
@@ -2729,8 +2735,8 @@
 	Object *obedit = CTX_data_edit_object(C);
 	BMEditMesh *em = BMEdit_FromObject(obedit);
 	BMEditSelection *ese = em->bm->selected.last;
-	int axis = RNA_enum_get(op->ptr, "axis");
-	int mode = RNA_enum_get(op->ptr, "mode"); /* -1 == aligned, 0 == neg, 1 == pos */
+	const int axis = RNA_enum_get(op->ptr, "axis");
+	const int mode = RNA_enum_get(op->ptr, "mode"); /* -1 == aligned, 0 == neg, 1 == pos */
 
 	if (ese == NULL || ese->htype != BM_VERT) {
 		BKE_report(op->reports, RPT_WARNING, "This operator requires an active vertex (last selected)");
@@ -2814,7 +2820,7 @@
 	BMesh *bm = em->bm;
 	BMOperator bmop;
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list