[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56035] trunk/blender/source/blender: bmesh operators: use operator type-flag to specify which operations require normal-calculations and which operations require selection flushing .

Campbell Barton ideasman42 at gmail.com
Sun Apr 14 08:22:37 CEST 2013


Revision: 56035
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56035
Author:   campbellbarton
Date:     2013-04-14 06:22:34 +0000 (Sun, 14 Apr 2013)
Log Message:
-----------
bmesh operators: use operator type-flag to specify which operations require normal-calculations and which operations require selection flushing.
eg, no need to flush selection after 'Smooth' tool, no need to recalculate normals after 'Select Similar'.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh.h
    trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    trunk/blender/source/blender/bmesh/intern/bmesh_operator_api.h
    trunk/blender/source/blender/editors/mesh/editmesh_knife.c
    trunk/blender/source/blender/editors/transform/transform.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c	2013-04-14 05:37:43 UTC (rev 56034)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c	2013-04-14 06:22:34 UTC (rev 56035)
@@ -415,16 +415,16 @@
  * the editing operations are done. These are called by the tools/operator
  * API for each time a tool is executed.
  */
-void bmesh_edit_begin(BMesh *UNUSED(bm), int UNUSED(type_flag))
+void bmesh_edit_begin(BMesh *UNUSED(bm), BMOpTypeFlag UNUSED(type_flag))
 {
-	/* Most operators seem to be using BMO_OP_FLAG_UNTAN_MULTIRES to change the MDisps to
+	/* Most operators seem to be using BMO_OPTYPE_FLAG_UNTAN_MULTIRES to change the MDisps to
 	 * absolute space during mesh edits. With this enabled, changes to the topology
 	 * (loop cuts, edge subdivides, etc) are not reflected in the higher levels of
 	 * the mesh at all, which doesn't seem right. Turning off completely for now,
 	 * until this is shown to be better for certain types of mesh edits. */
 #ifdef BMOP_UNTAN_MULTIRES_ENABLED
 	/* switch multires data out of tangent space */
-	if ((type_flag & BMO_OP_FLAG_UNTAN_MULTIRES) && CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
+	if ((type_flag & BMO_OPTYPE_FLAG_UNTAN_MULTIRES) && CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
 		bmesh_mdisps_space_set(bm, MULTIRES_SPACE_TANGENT, MULTIRES_SPACE_ABSOLUTE);
 
 		/* ensure correct normals, if possible */
@@ -437,12 +437,12 @@
 /**
  * \brief BMesh End Edit
  */
-void bmesh_edit_end(BMesh *bm, int UNUSED(flag))
+void bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
 {
-	/* BMO_OP_FLAG_UNTAN_MULTIRES disabled for now, see comment above in bmesh_edit_begin. */
+	/* BMO_OPTYPE_FLAG_UNTAN_MULTIRES disabled for now, see comment above in bmesh_edit_begin. */
 #ifdef BMOP_UNTAN_MULTIRES_ENABLED
 	/* switch multires data into tangent space */
-	if ((flag & BMO_OP_FLAG_UNTAN_MULTIRES) && CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
+	if ((flag & BMO_OPTYPE_FLAG_UNTAN_MULTIRES) && CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
 		/* set normals to their previous winding */
 		bmesh_rationalize_normals(bm, 1);
 		bmesh_mdisps_space_set(bm, MULTIRES_SPACE_ABSOLUTE, MULTIRES_SPACE_TANGENT);
@@ -453,8 +453,13 @@
 #endif
 
 	/* compute normals, clear temp flags and flush selections */
-	BM_mesh_normals_update(bm, true);
-	BM_mesh_select_mode_flush(bm);
+	if (type_flag & BMO_OPTYPE_FLAG_NORMALS_CALC) {
+		BM_mesh_normals_update(bm, true);
+	}
+
+	if (type_flag & BMO_OPTYPE_FLAG_SELECT_FLUSH) {
+		BM_mesh_select_mode_flush(bm);
+	}
 }
 
 void BM_mesh_elem_index_ensure(BMesh *bm, const char hflag)

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mesh.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mesh.h	2013-04-14 05:37:43 UTC (rev 56034)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mesh.h	2013-04-14 06:22:34 UTC (rev 56035)
@@ -39,8 +39,8 @@
 
 void BM_mesh_normals_update(BMesh *bm, const bool skip_hidden);
 
-void bmesh_edit_begin(BMesh *bm, int type_flag);
-void bmesh_edit_end(BMesh *bm, int type_flag);
+void bmesh_edit_begin(BMesh *bm, const BMOpTypeFlag type_flag);
+void bmesh_edit_end(BMesh *bm, const BMOpTypeFlag type_flag);
 
 void BM_mesh_elem_index_ensure(BMesh *bm, const char hflag);
 void BM_mesh_elem_index_validate(BMesh *bm, const char *location, const char *func,

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2013-04-14 05:37:43 UTC (rev 56034)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2013-04-14 06:22:34 UTC (rev 56035)
@@ -115,7 +115,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_smooth_vert_exec,
-	0
+	BMO_OPTYPE_FLAG_NORMALS_CALC,
 };
 
 /*
@@ -138,7 +138,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_smooth_laplacian_vert_exec,
-	0
+	BMO_OPTYPE_FLAG_NORMALS_CALC,
 };
 
 /*
@@ -155,7 +155,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_recalc_face_normals_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES,
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC,
 };
 
 /*
@@ -181,7 +181,7 @@
 	 {{'\0'}},
 	},
 	bmo_region_extend_exec,
-	0
+	BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -202,7 +202,7 @@
 	 {{'\0'}},
 	},
 	bmo_rotate_edges_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -219,7 +219,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_reverse_faces_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES,
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC,
 };
 
 /*
@@ -240,7 +240,7 @@
 	 {{'\0'}},
 	},
 	bmo_bisect_edges_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -266,7 +266,7 @@
 	 {{'\0'}},
 	},
 	bmo_mirror_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -291,7 +291,7 @@
 	 {{'\0'}},
 	},
 	bmo_find_doubles_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -309,7 +309,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_remove_doubles_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES,
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -328,7 +328,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_automerge_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES,
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -344,7 +344,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_collapse_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES,
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -361,7 +361,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_pointmerge_facedata_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -379,7 +379,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_average_vert_facedata_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -396,7 +396,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_pointmerge_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES,
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -412,7 +412,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_collapse_uvs_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -431,7 +431,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_weld_verts_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES,
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -451,7 +451,7 @@
 	 {{'\0'}},
 	},
 	bmo_create_vert_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -476,7 +476,7 @@
 	 {{'\0'}},
 	},
 	bmo_join_triangles_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES,
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -504,7 +504,7 @@
 	 {{'\0'}},
 	},
 	bmo_contextual_create_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES,
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -523,7 +523,7 @@
 	 {{'\0'}},
 	},
 	bmo_bridge_loops_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -546,7 +546,7 @@
 	 {{'\0'}},
 	},
 	bmo_edgeloop_fill_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 
@@ -575,7 +575,7 @@
 	 {{'\0'}},
 	},
 	bmo_edgenet_fill_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -599,7 +599,7 @@
 	 {{'\0'}},
 	},
 	bmo_edgenet_prepare_exec,
-	0,
+	BMO_OPTYPE_FLAG_NOP,
 };
 
 /*
@@ -617,7 +617,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_rotate_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC,
 };
 
 /*
@@ -634,7 +634,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_translate_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC,
 };
 
 /*
@@ -651,7 +651,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_scale_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC,
 };
 
 
@@ -670,7 +670,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_transform_exec,
-	0,
+	BMO_OPTYPE_FLAG_NORMALS_CALC,
 };
 
 /*
@@ -688,7 +688,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_object_load_bmesh_exec,
-	0,
+	BMO_OPTYPE_FLAG_NOP,
 };
 
 
@@ -710,7 +710,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_bmesh_to_mesh_exec,
-	0,
+	BMO_OPTYPE_FLAG_NOP,
 };
 
 /*
@@ -732,7 +732,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_mesh_to_bmesh_exec,
-	0
+	BMO_OPTYPE_FLAG_NOP,
 };
 
 /*
@@ -751,7 +751,7 @@
 	 {{'\0'}},
 	},
 	bmo_extrude_discrete_faces_exec,
-	0
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -771,7 +771,7 @@
 	 {{'\0'}},
 	},
 	bmo_extrude_edge_only_exec,
-	0
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -791,7 +791,7 @@
 	 {{'\0'}},
 	},
 	bmo_extrude_vert_indiv_exec,
-	0
+	BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -810,7 +810,7 @@
 	 {{'\0'}},
 	},
 	bmo_connect_verts_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -831,7 +831,7 @@
 	 {{'\0'}},
 	},
 	bmo_extrude_face_region_exec,
-	0
+	BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -845,7 +845,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_dissolve_verts_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -863,7 +863,7 @@
 	 {{'\0'}},
 	},
 	bmo_dissolve_edges_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -880,7 +880,7 @@
 	 {{'\0'}},
 	},
 	bmo_dissolve_edgeloop_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -898,7 +898,7 @@
 	 {{'\0'}},
 	},
 	bmo_dissolve_faces_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -917,7 +917,7 @@
 	},
 	{{{'\0'}}},  /* no output */
 	bmo_dissolve_limit_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES
+	BMO_OPTYPE_FLAG_UNTAN_MULTIRES | BMO_OPTYPE_FLAG_NORMALS_CALC | BMO_OPTYPE_FLAG_SELECT_FLUSH,
 };
 
 /*
@@ -937,7 +937,7 @@
 	 {{'\0'}},
 	},
 	bmo_triangulate_exec,
-	BMO_OP_FLAG_UNTAN_MULTIRES

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list