[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44435] trunk/blender/source/blender: bmesh api:

Campbell Barton ideasman42 at gmail.com
Sat Feb 25 20:43:51 CET 2012


Revision: 44435
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44435
Author:   campbellbarton
Date:     2012-02-25 19:43:51 +0000 (Sat, 25 Feb 2012)
Log Message:
-----------
bmesh api:
* added BM_elem_flag_set, BMO_elem_flag_set. to avoid 'if(...) enable(); else disable();' all over the place.
* added bmesh_operator_api_inline.c, the header file was getting messy.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/CMakeLists.txt
    trunk/blender/source/blender/bmesh/bmesh.h
    trunk/blender/source/blender/bmesh/bmesh_operator_api.h
    trunk/blender/source/blender/bmesh/intern/bmesh_inline.c
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c
    trunk/blender/source/blender/bmesh/intern/bmesh_queries.c
    trunk/blender/source/blender/bmesh/operators/bmo_create.c
    trunk/blender/source/blender/bmesh/operators/bmo_dissolve.c
    trunk/blender/source/blender/bmesh/operators/bmo_dupe.c
    trunk/blender/source/blender/bmesh/operators/bmo_extrude.c
    trunk/blender/source/blender/bmesh/operators/bmo_primitive.c
    trunk/blender/source/blender/bmesh/operators/bmo_removedoubles.c
    trunk/blender/source/blender/bmesh/operators/bmo_triangulate.c
    trunk/blender/source/blender/bmesh/operators/bmo_utils.c
    trunk/blender/source/blender/bmesh/tools/BME_bevel.c
    trunk/blender/source/blender/editors/mesh/bmesh_select.c
    trunk/blender/source/blender/editors/mesh/bmesh_tools.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c

Added Paths:
-----------
    trunk/blender/source/blender/bmesh/intern/bmesh_operator_api_inline.c

Modified: trunk/blender/source/blender/bmesh/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/bmesh/CMakeLists.txt	2012-02-25 18:13:58 UTC (rev 44434)
+++ trunk/blender/source/blender/bmesh/CMakeLists.txt	2012-02-25 19:43:51 UTC (rev 44435)
@@ -90,6 +90,7 @@
 	intern/bmesh_mods.c
 	intern/bmesh_newcore.c
 	intern/bmesh_opdefines.c
+	intern/bmesh_operator_api_inline.c
 	intern/bmesh_operators.c
 	intern/bmesh_operators_private.h
 	intern/bmesh_polygon.c

Modified: trunk/blender/source/blender/bmesh/bmesh.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh.h	2012-02-25 18:13:58 UTC (rev 44434)
+++ trunk/blender/source/blender/bmesh/bmesh.h	2012-02-25 19:43:51 UTC (rev 44435)
@@ -372,6 +372,7 @@
 #include "bmesh_iterators.h"
 #include "bmesh_walkers.h"
 #include "intern/bmesh_inline.c"
+#include "intern/bmesh_operator_api_inline.c"
 
 #ifdef __cplusplus
 }

Modified: trunk/blender/source/blender/bmesh/bmesh_operator_api.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh_operator_api.h	2012-02-25 18:13:58 UTC (rev 44434)
+++ trunk/blender/source/blender/bmesh/bmesh_operator_api.h	2012-02-25 19:43:51 UTC (rev 44435)
@@ -73,6 +73,7 @@
  *   semantically similar to the iterator api in bmesh_iterators.h).
  */
 
+struct BMesh;
 struct GHashIterator;
 
 /* slot type arrays are terminated by the last member
@@ -182,15 +183,10 @@
 #define BMO_elem_flag_test(bm, element, oflag)    ((element)->oflags[bm->stackdepth-1].f &   (oflag))
 #define BMO_elem_flag_enable(bm, element, oflag)  ((element)->oflags[bm->stackdepth-1].f |=  (oflag))
 #define BMO_elem_flag_disable(bm, element, oflag) ((element)->oflags[bm->stackdepth-1].f &= ~(oflag))
+#define BMO_elem_flag_set(bm, element, oflag, val)((val) ? BMO_elem_flag_enable(bm, element, oflag) : \
+                                                           BMO_elem_flag_disable(bm, element, oflag))
 #define BMO_elem_flag_toggle(bm, element, oflag)  ((element)->oflags[bm->stackdepth-1].f ^=  (oflag))
 
-/* profiling showed a significant amount of time spent in BMO_elem_flag_test */
-#if 0
-void BMO_elem_flag_enable(struct BMesh *bm, void *element, const short oflag);
-void BMO_elem_flag_disable(struct BMesh *bm, void *element, const short oflag);
-int BMO_elem_flag_test(struct BMesh *bm, void *element, const short oflag);
-#endif
-
 /* count the number of elements with a specific flag.
  * type can be a bitmask of BM_FACE, BM_EDGE, or BM_FACE. */
 int BMO_mesh_flag_count(struct BMesh *bm, const short oflag, const char htype);
@@ -339,44 +335,11 @@
  */
 int BMO_vert_edge_flags_count(BMesh *bm, BMVert *v, const short oflag);
 
-/* inserts a key/value mapping into a mapping slot.  note that it copies the
- * value, it doesn't store a reference to it. */
-
-#if 0
-
-BM_INLINE void BMO_slot_map_insert(BMesh *bm, BMOperator *op, const char *slotname,
-                                   void *element, void *data, int len);
-
-/* inserts a key/float mapping pair into a mapping slot. */
-BM_INLINE void BMO_slot_map_float_insert(BMesh *bm, BMOperator *op, const char *slotname,
-                                         void *element, float val);
-
-/* returns 1 if the specified pointer is in the map. */
-BM_INLINE int BMO_slot_map_contains(BMesh *bm, BMOperator *op, const char *slotname, void *element);
-
-/* returns a point to the value of a specific key. */
-BM_INLINE void *BMO_slot_map_data_get(BMesh *bm, BMOperator *op, const char *slotname, void *element);
-
-/* returns the float part of a key/float pair. */
-BM_INLINE float BMO_slot_map_float_get(BMesh *bm, BMOperator *op, const char *slotname, void *element);
-
-#endif
-
 /* flags all elements in a mapping.  note that the mapping must only have
  * bmesh elements in it.*/
 void BMO_slot_map_to_flag(struct BMesh *bm, struct BMOperator *op,
                           const char *slotname, const short oflag);
 
-/* pointer versoins of BMO_slot_map_float_get and BMO_slot_map_float_insert.
- *
- * do NOT use these for non-operator-api-allocated memory! instead
- * use BMO_slot_map_data_get and BMO_slot_map_insert, which copies the data. */
-
-#if 0
-BM_INLINE void BMO_slot_map_ptr_insert(BMesh *bm, BMOperator *op, const char *slotname, void *key, void *val);
-BM_INLINE void *BMO_slot_map_ptr_get(BMesh *bm, BMOperator *op, const char *slotname, void *key);
-#endif
-
 /* this part of the API is used to iterate over element buffer or
  * mapping slots.
  *
@@ -453,104 +416,6 @@
 
 extern const int BMO_OPSLOT_TYPEINFO[BMO_OP_SLOT_TOTAL_TYPES];
 
-BM_INLINE void BMO_slot_map_insert(BMesh *UNUSED(bm), BMOperator *op, const char *slotname,
-                                   void *element, void *data, int len)
-{
-	BMOElemMapping *mapping;
-	BMOpSlot *slot = BMO_slot_get(op, slotname);
-
-	/*sanity check*/
-	if (slot->slottype != BMO_OP_SLOT_MAPPING) {
-		return;
-	}
-
-	mapping = (BMOElemMapping *) BLI_memarena_alloc(op->arena, sizeof(*mapping) + len);
-
-	mapping->element = (BMHeader*) element;
-	mapping->len = len;
-	memcpy(mapping + 1, data, len);
-
-	if (!slot->data.ghash) {
-		slot->data.ghash = BLI_ghash_new(BLI_ghashutil_ptrhash,
-		                                 BLI_ghashutil_ptrcmp, "bmesh op");
-	}
-
-	BLI_ghash_insert(slot->data.ghash, element, mapping);
-}
-
-BM_INLINE void BMO_slot_map_int_insert(BMesh *bm, BMOperator *op, const char *slotname,
-                                       void *element, int val)
-{
-	BMO_slot_map_insert(bm, op, slotname, element, &val, sizeof(int));
-}
-
-BM_INLINE void BMO_slot_map_float_insert(BMesh *bm, BMOperator *op, const char *slotname,
-                                         void *element, float val)
-{
-	BMO_slot_map_insert(bm, op, slotname, element, &val, sizeof(float));
-}
-
-BM_INLINE void BMO_slot_map_ptr_insert(BMesh *bm, BMOperator *op, const char *slotname,
-                                       void *element, void *val)
-{
-	BMO_slot_map_insert(bm, op, slotname, element, &val, sizeof(void*));
-}
-
-BM_INLINE int BMO_slot_map_contains(BMesh *UNUSED(bm), BMOperator *op, const char *slotname, void *element)
-{
-	BMOpSlot *slot = BMO_slot_get(op, slotname);
-
-	/*sanity check*/
-	if (slot->slottype != BMO_OP_SLOT_MAPPING) return 0;
-	if (!slot->data.ghash) return 0;
-
-	return BLI_ghash_haskey(slot->data.ghash, element);
-}
-
-BM_INLINE void *BMO_slot_map_data_get(BMesh *UNUSED(bm), BMOperator *op, const char *slotname,
-                                      void *element)
-{
-	BMOElemMapping *mapping;
-	BMOpSlot *slot = BMO_slot_get(op, slotname);
-
-	/*sanity check*/
-	if (slot->slottype != BMO_OP_SLOT_MAPPING) return NULL;
-	if (!slot->data.ghash) return NULL;
-
-	mapping = (BMOElemMapping *)BLI_ghash_lookup(slot->data.ghash, element);
-
-	if (!mapping) return NULL;
-
-	return mapping + 1;
-}
-
-BM_INLINE float BMO_slot_map_float_get(BMesh *bm, BMOperator *op, const char *slotname,
-                                       void *element)
-{
-	float *val = (float*) BMO_slot_map_data_get(bm, op, slotname, element);
-	if (val) return *val;
-
-	return 0.0f;
-}
-
-BM_INLINE int BMO_slot_map_int_get(BMesh *bm, BMOperator *op, const char *slotname,
-                                   void *element)
-{
-	int *val = (int*) BMO_slot_map_data_get(bm, op, slotname, element);
-	if (val) return *val;
-
-	return 0;
-}
-
-BM_INLINE void *BMO_slot_map_ptr_get(BMesh *bm, BMOperator *op, const char *slotname,
-                                     void *element)
-{
-	void **val = (void**) BMO_slot_map_data_get(bm, op, slotname, element);
-	if (val) return *val;
-
-	return NULL;
-}
-
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_inline.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_inline.c	2012-02-25 18:13:58 UTC (rev 44434)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_inline.c	2012-02-25 19:43:51 UTC (rev 44435)
@@ -46,6 +46,12 @@
 	((BMHeader *)element)->hflag &= ~hflag;
 }
 
+BM_INLINE void BM_elem_flag_set(void *element, const char hflag, const int val)
+{
+	if (val)  BM_elem_flag_enable(element,  hflag);
+	else      BM_elem_flag_disable(element, hflag);
+}
+
 BM_INLINE void BM_elem_flag_toggle(void *element, const char hflag)
 {
 	((BMHeader *)element)->hflag ^= hflag;

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2012-02-25 18:13:58 UTC (rev 44434)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2012-02-25 19:43:51 UTC (rev 44435)
@@ -115,12 +115,7 @@
 				ok = FALSE;
 			}
 
-			if (ok) {
-				BM_elem_flag_enable(f, BM_ELEM_SELECT);
-			}
-			else {
-				BM_elem_flag_disable(f, BM_ELEM_SELECT);
-			}
+			BM_elem_flag_set(f, BM_ELEM_SELECT, ok);
 		}
 	}
 	else if (bm->selectmode & SCE_SELECT_EDGE) {
@@ -139,12 +134,7 @@
 				ok = FALSE;
 			}
 
-			if (ok) {
-				BM_elem_flag_enable(f, BM_ELEM_SELECT);
-			}
-			else {
-				BM_elem_flag_disable(f, BM_ELEM_SELECT);
-			}
+			BM_elem_flag_set(f, BM_ELEM_SELECT, ok);
 		}
 	}
 
@@ -802,9 +792,6 @@
 
 /***************** Mesh Hiding stuff *********** */
 
-#define BM_ELEM_HIDE_SET(ele, hide) \
-	(hide) ? BM_elem_flag_enable(ele, BM_ELEM_HIDDEN) : BM_elem_flag_disable(ele, BM_ELEM_HIDDEN);
-
 static void vert_flush_hide_set(BMesh *bm, BMVert *v)
 {
 	BMIter iter;
@@ -815,7 +802,7 @@
 		hide = hide && BM_elem_flag_test(e, BM_ELEM_HIDDEN);
 	}
 
-	BM_ELEM_HIDE_SET(v, hide);
+	BM_elem_flag_set(v, BM_ELEM_HIDDEN, hide);
 }
 
 static void edge_flush_hide(BMesh *bm, BMEdge *e)
@@ -828,7 +815,7 @@
 		hide = hide && BM_elem_flag_test(f, BM_ELEM_HIDDEN);
 	}
 
-	BM_ELEM_HIDE_SET(e, hide);
+	BM_elem_flag_set(e, BM_ELEM_HIDDEN, hide);
 }
 
 void BM_vert_hide_set(BMesh *bm, BMVert *v, int hide)
@@ -838,13 +825,13 @@
 	BMEdge *e;
 	BMFace *f;
 
-	BM_ELEM_HIDE_SET(v, hide);
+	BM_elem_flag_set(v, BM_ELEM_HIDDEN, hide);
 
 	BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) {
-		BM_ELEM_HIDE_SET(e, hide);
+		BM_elem_flag_set(e, BM_ELEM_HIDDEN, hide);
 
 		BM_ITER(f, &fiter, bm, BM_FACES_OF_EDGE, e) {
-			BM_ELEM_HIDE_SET(f, hide);
+			BM_elem_flag_set(f, BM_ELEM_HIDDEN, hide);
 		}
 	}
 }
@@ -857,10 +844,10 @@
 
 	/* edge hiding: faces around the edge */
 	BM_ITER(f, &iter, bm, BM_FACES_OF_EDGE, e) {
-		BM_ELEM_HIDE_SET(f, hide);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list