[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58590] trunk/blender/source/blender: correct problem with limited-dissolve not leaving the selection correctly (caused by BM_elem_attrs_copy no longer dealing with selection)

Campbell Barton ideasman42 at gmail.com
Thu Jul 25 08:05:44 CEST 2013


Revision: 58590
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58590
Author:   campbellbarton
Date:     2013-07-25 06:05:44 +0000 (Thu, 25 Jul 2013)
Log Message:
-----------
correct problem with limited-dissolve not leaving the selection correctly (caused by BM_elem_attrs_copy no longer dealing with selection)

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    trunk/blender/source/blender/bmesh/operators/bmo_dissolve.c
    trunk/blender/source/blender/bmesh/tools/bmesh_decimate.h
    trunk/blender/source/blender/bmesh/tools/bmesh_decimate_dissolve.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2013-07-25 04:58:31 UTC (rev 58589)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2013-07-25 06:05:44 UTC (rev 58590)
@@ -947,7 +947,9 @@
 	 {"delimit", BMO_OP_SLOT_INT},
 	 {{'\0'}},
 	},
-	{{{'\0'}}},  /* no output */
+	/* slots_out */
+	{{"region.out", BMO_OP_SLOT_ELEMENT_BUF, {BM_FACE}},
+	 {{'\0'}}},
 	bmo_dissolve_limit_exec,
 	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
@@ -1044,7 +1046,7 @@
 	 {{'\0'}},
 	},
 	{{"faces.out", BMO_OP_SLOT_ELEMENT_BUF, {BM_FACE}}, /* output faces */
-	 {{'\0'}}},  /* no output */
+	 {{'\0'}}},
 	bmo_subdivide_edgering_exec,
 	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
@@ -1224,7 +1226,6 @@
 	 {"use_ccw", BMO_OP_SLOT_BOOL},         /* rotate counter-clockwise if true, otherwise clockwise */
 	 {{'\0'}},
 	},
-	/* slots_out */
 	{{{'\0'}}},  /* no output */
 	bmo_rotate_uvs_exec,
 	BMO_OPTYPE_FLAG_NOP,

Modified: trunk/blender/source/blender/bmesh/operators/bmo_dissolve.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_dissolve.c	2013-07-25 04:58:31 UTC (rev 58589)
+++ trunk/blender/source/blender/bmesh/operators/bmo_dissolve.c	2013-07-25 06:05:44 UTC (rev 58590)
@@ -430,5 +430,8 @@
 
 	BM_mesh_decimate_dissolve_ex(bm, angle_limit, do_dissolve_boundaries, delimit,
 	                             (BMVert **)BMO_SLOT_AS_BUFFER(vinput), vinput->len,
-	                             (BMEdge **)BMO_SLOT_AS_BUFFER(einput), einput->len);
+	                             (BMEdge **)BMO_SLOT_AS_BUFFER(einput), einput->len,
+	                             FACE_NEW);
+
+	BMO_slot_buffer_from_enabled_flag(bm, op, op->slots_out, "region.out", BM_FACE, FACE_NEW);
 }

Modified: trunk/blender/source/blender/bmesh/tools/bmesh_decimate.h
===================================================================
--- trunk/blender/source/blender/bmesh/tools/bmesh_decimate.h	2013-07-25 04:58:31 UTC (rev 58589)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_decimate.h	2013-07-25 06:05:44 UTC (rev 58590)
@@ -35,7 +35,8 @@
 void BM_mesh_decimate_dissolve_ex(BMesh *bm, const float angle_limit, const bool do_dissolve_boundaries,
                                   const BMO_Delimit delimit,
                                   BMVert **vinput_arr, const int vinput_len,
-                                  BMEdge **einput_arr, const int einput_len);
+                                  BMEdge **einput_arr, const int einput_len,
+                                  const short oflag_out);
 void BM_mesh_decimate_dissolve(BMesh *bm, const float angle_limit, const bool do_dissolve_boundaries,
                                const BMO_Delimit delimit);
 

Modified: trunk/blender/source/blender/bmesh/tools/bmesh_decimate_dissolve.c
===================================================================
--- trunk/blender/source/blender/bmesh/tools/bmesh_decimate_dissolve.c	2013-07-25 04:58:31 UTC (rev 58589)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_decimate_dissolve.c	2013-07-25 06:05:44 UTC (rev 58590)
@@ -72,7 +72,8 @@
 void BM_mesh_decimate_dissolve_ex(BMesh *bm, const float angle_limit, const bool do_dissolve_boundaries,
                                   const BMO_Delimit delimit,
                                   BMVert **vinput_arr, const int vinput_len,
-                                  BMEdge **einput_arr, const int einput_len)
+                                  BMEdge **einput_arr, const int einput_len,
+                                  const short oflag_out)
 {
 	const float angle_max = (float)M_PI / 2.0f;
 	DissolveElemWeight *weight_elems = MEM_mallocN(max_ii(einput_len, vinput_len) *
@@ -155,6 +156,9 @@
 				/* there may be some errors, we don't mind, just move on */
 				if (f_new) {
 					BM_face_normal_update(f_new);
+					if (oflag_out) {
+						BMO_elem_flag_enable(bm, f_new, oflag_out);
+					}
 				}
 				else {
 					BMO_error_clear(bm);
@@ -269,7 +273,8 @@
 	BM_mesh_decimate_dissolve_ex(bm, angle_limit, do_dissolve_boundaries,
 	                             delimit,
 	                             vinput_arr, vinput_len,
-	                             einput_arr, einput_len);
+	                             einput_arr, einput_len,
+	                             0);
 
 	MEM_freeN(vinput_arr);
 	MEM_freeN(einput_arr);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-07-25 04:58:31 UTC (rev 58589)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-07-25 06:05:44 UTC (rev 58590)
@@ -3057,6 +3057,7 @@
 	Object *obedit = CTX_data_edit_object(C);
 	BMEditMesh *em = BKE_editmesh_from_object(obedit);
 	BMesh *bm = em->bm;
+	BMOperator bmop;
 	const float angle_limit = RNA_float_get(op->ptr, "angle_limit");
 	const bool use_dissolve_boundaries = RNA_boolean_get(op->ptr, "use_dissolve_boundaries");
 	const int delimit = RNA_enum_get(op->ptr, "delimit");
@@ -3094,10 +3095,12 @@
 		dissolve_flag = BM_ELEM_SELECT;
 	}
 
-	if (!EDBM_op_callf(em, op,
-	                   "dissolve_limit edges=%he verts=%hv angle_limit=%f use_dissolve_boundaries=%b delimit=%i",
-	                   dissolve_flag, dissolve_flag, angle_limit, use_dissolve_boundaries, delimit))
-	{
+	EDBM_op_init(em, &bmop, op,
+	             "dissolve_limit edges=%he verts=%hv angle_limit=%f use_dissolve_boundaries=%b delimit=%i",
+	             dissolve_flag, dissolve_flag, angle_limit, use_dissolve_boundaries, delimit);
+	BMO_op_exec(em->bm, &bmop);
+	BMO_slot_buffer_hflag_enable(em->bm, bmop.slots_out, "region.out", BM_FACE, BM_ELEM_SELECT, true);
+	if (!EDBM_op_finish(em, &bmop, op, true)) {
 		return OPERATOR_CANCELLED;
 	}
 




More information about the Bf-blender-cvs mailing list