[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44441] trunk/blender/source/blender: bmesh api cleanup
Campbell Barton
ideasman42 at gmail.com
Sat Feb 25 23:23:46 CET 2012
Revision: 44441
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44441
Author: campbellbarton
Date: 2012-02-25 22:23:40 +0000 (Sat, 25 Feb 2012)
Log Message:
-----------
bmesh api cleanup
* better type safety for BM_elem_flag_* and BM_elem_index_* functions.
* add BMElem type to be used where BMFace/Edge/Vert/Loop can be interchanged.
* fix bug in select manifold, found when making functions more strict.
Modified Paths:
--------------
trunk/blender/source/blender/bmesh/bmesh.h
trunk/blender/source/blender/bmesh/bmesh_class.h
trunk/blender/source/blender/bmesh/bmesh_marking.h
trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
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_newcore.c
trunk/blender/source/blender/bmesh/intern/bmesh_operators.c
trunk/blender/source/blender/bmesh/operators/bmo_mesh_conv.c
trunk/blender/source/blender/editors/mesh/bmesh_select.c
trunk/blender/source/blender/editors/mesh/bmesh_selecthistory.c
trunk/blender/source/blender/editors/mesh/bmesh_tools.c
trunk/blender/source/blender/editors/mesh/bmesh_utils.c
trunk/blender/source/blender/editors/space_view3d/drawobject.c
trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c
trunk/blender/source/blender/editors/transform/transform_conversions.c
trunk/blender/source/blender/modifiers/intern/MOD_array.c
trunk/blender/source/blender/python/bmesh/bmesh_py_types.c
trunk/blender/source/blender/python/bmesh/bmesh_py_types.h
Modified: trunk/blender/source/blender/bmesh/bmesh.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh.h 2012-02-25 21:27:45 UTC (rev 44440)
+++ trunk/blender/source/blender/bmesh/bmesh.h 2012-02-25 22:23:40 UTC (rev 44441)
@@ -144,18 +144,20 @@
BMFace *BM_face_create_ngon(BMesh *bm, BMVert *v1, BMVert *v2, BMEdge **edges, int len, int nodouble);
/* stuff for dealing with header flags */
-BM_INLINE char BM_elem_flag_test(const void *element, const char hflag);
+#define BM_elem_flag_test(ele, hflag) _bm_elem_flag_test (&(ele)->head, hflag)
+#define BM_elem_flag_enable(ele, hflag) _bm_elem_flag_enable (&(ele)->head, hflag)
+#define BM_elem_flag_disable(ele, hflag) _bm_elem_flag_disable (&(ele)->head, hflag)
+#define BM_elem_flag_set(ele, hflag, val) _bm_elem_flag_set (&(ele)->head, hflag, val)
+#define BM_elem_flag_toggle(ele, hflag) _bm_elem_flag_toggle (&(ele)->head, hflag)
+#define BM_elem_flag_merge(ele_a, ele_b) _bm_elem_flag_merge (&(ele_a)->head, &(ele_b)->head)
-/* stuff for dealing with header flags */
-BM_INLINE void BM_elem_flag_enable(void *element, const char hflag);
+BM_INLINE char _bm_elem_flag_test(const BMHeader *element, const char hflag);
+BM_INLINE void _bm_elem_flag_enable(BMHeader *element, const char hflag);
+BM_INLINE void _bm_elem_flag_disable(BMHeader *element, const char hflag);
+BM_INLINE void _bm_elem_flag_set(BMHeader *ele, const char hflag, const int val);
+BM_INLINE void _bm_elem_flag_toggle(BMHeader *ele, const char hflag);
+BM_INLINE void _bm_elem_flag_merge(BMHeader *ele_a, BMHeader *ele_b);
-/* stuff for dealing with header flags */
-BM_INLINE void BM_elem_flag_disable(void *element, const char hflag);
-
-/* stuff for dealing BM_elem_flag_toggle header flags */
-BM_INLINE void BM_elem_flag_toggle(void *element, const char hflag);
-BM_INLINE void BM_elem_flag_merge(void *element_a, void *element_b);
-
/* notes on BM_elem_index_set(...) usage,
* Set index is sometimes abused as temp storage, other times we cant be
* sure if the index values are valid because certain operations have modified
@@ -185,8 +187,10 @@
* assume each case they are dirty.
* - campbell */
-BM_INLINE void BM_elem_index_set(void *element, const int index);
-BM_INLINE int BM_elem_index_get(const void *element);
+#define BM_elem_index_get(ele) _bm_elem_index_get(&(ele)->head)
+#define BM_elem_index_set(ele, index) _bm_elem_index_set(&(ele)->head, index)
+BM_INLINE int _bm_elem_index_get(const BMHeader *ele);
+BM_INLINE void _bm_elem_index_set(BMHeader *ele, const int index);
/* todo */
BMFace *BM_face_copy(BMesh *bm, BMFace *f, const short copyverts, const short copyedges);
Modified: trunk/blender/source/blender/bmesh/bmesh_class.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh_class.h 2012-02-25 21:27:45 UTC (rev 44440)
+++ trunk/blender/source/blender/bmesh/bmesh_class.h 2012-02-25 22:23:40 UTC (rev 44441)
@@ -111,6 +111,11 @@
struct BMFlagLayer *oflags; /* keep after header, an array of flags, mostly used by the operator stack */
} BMElemF;
+/* can cast anything to this, including BMLoop */
+typedef struct BMElem {
+ BMHeader head;
+} BMElem;
+
#ifdef USE_BMESH_HOLES
/* eventually, this structure will be used for supporting holes in faces */
typedef struct BMLoopList {
Modified: trunk/blender/source/blender/bmesh/bmesh_marking.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh_marking.h 2012-02-25 21:27:45 UTC (rev 44440)
+++ trunk/blender/source/blender/bmesh/bmesh_marking.h 2012-02-25 22:23:40 UTC (rev 44441)
@@ -30,7 +30,7 @@
typedef struct BMEditSelection
{
struct BMEditSelection *next, *prev;
- void *data;
+ BMElem *ele;
char htype;
} BMEditSelection;
@@ -66,9 +66,9 @@
void BM_editselection_normal(float r_normal[3], BMEditSelection *ese);
void BM_editselection_plane(BMesh *bm, float r_plane[3], BMEditSelection *ese);
-int BM_select_history_check(BMesh *bm, void *data);
-void BM_select_history_remove(BMesh *bm, void *data);
-void BM_select_history_store(BMesh *bm, void *data);
+int BM_select_history_check(BMesh *bm, const BMElem *ele);
+void BM_select_history_remove(BMesh *bm, BMElem *ele);
+void BM_select_history_store(BMesh *bm, BMElem *ele);
void BM_select_history_validate(BMesh *bm);
void BM_select_history_clear(BMesh *em);
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_construct.c 2012-02-25 21:27:45 UTC (rev 44440)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_construct.c 2012-02-25 22:23:40 UTC (rev 44441)
@@ -566,7 +566,7 @@
return;
/* First we copy select */
- if (BM_elem_flag_test(source, BM_ELEM_SELECT)) {
+ if (BM_elem_flag_test((BMElem *)sheader, BM_ELEM_SELECT)) {
BM_elem_select_set(target_mesh, target, TRUE);
}
@@ -706,11 +706,11 @@
void *ele = NULL;
if (ese->htype == BM_VERT)
- ele = vtable[BM_elem_index_get(ese->data)];
+ ele = vtable[BM_elem_index_get(ese->ele)];
else if (ese->htype == BM_EDGE)
- ele = etable[BM_elem_index_get(ese->data)];
+ ele = etable[BM_elem_index_get(ese->ele)];
else if (ese->htype == BM_FACE) {
- ele = ftable[BM_elem_index_get(ese->data)];
+ ele = ftable[BM_elem_index_get(ese->ele)];
}
else {
BLI_assert(0);
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_inline.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_inline.c 2012-02-25 21:27:45 UTC (rev 44440)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_inline.c 2012-02-25 22:23:40 UTC (rev 44441)
@@ -31,47 +31,46 @@
#include "bmesh.h"
-BM_INLINE char BM_elem_flag_test(const void *element, const char hflag)
+BM_INLINE char _bm_elem_flag_test(const BMHeader *ele, const char hflag)
{
- return ((const BMHeader *)element)->hflag & hflag;
+ return ele->hflag & hflag;
}
-BM_INLINE void BM_elem_flag_enable(void *element, const char hflag)
+BM_INLINE void _bm_elem_flag_enable(BMHeader *ele, const char hflag)
{
- ((BMHeader *)element)->hflag |= hflag;
+ ele->hflag |= hflag;
}
-BM_INLINE void BM_elem_flag_disable(void *element, const char hflag)
+BM_INLINE void _bm_elem_flag_disable(BMHeader *ele, const char hflag)
{
- ((BMHeader *)element)->hflag &= ~hflag;
+ ele->hflag &= ~hflag;
}
-BM_INLINE void BM_elem_flag_set(void *element, const char hflag, const int val)
+BM_INLINE void _bm_elem_flag_set(BMHeader *ele, const char hflag, const int val)
{
- if (val) BM_elem_flag_enable(element, hflag);
- else BM_elem_flag_disable(element, hflag);
+ if (val) _bm_elem_flag_enable(ele, hflag);
+ else _bm_elem_flag_disable(ele, hflag);
}
-BM_INLINE void BM_elem_flag_toggle(void *element, const char hflag)
+BM_INLINE void _bm_elem_flag_toggle(BMHeader *ele, const char hflag)
{
- ((BMHeader *)element)->hflag ^= hflag;
+ ele->hflag ^= hflag;
}
-BM_INLINE void BM_elem_flag_merge(void *element_a, void *element_b)
+BM_INLINE void _bm_elem_flag_merge(BMHeader *ele_a, BMHeader *ele_b)
{
- ((BMHeader *)element_a)->hflag =
- ((BMHeader *)element_b)->hflag = (((BMHeader *)element_a)->hflag |
- ((BMHeader *)element_b)->hflag);
+ ele_a->hflag = ele_b->hflag = ele_a->hflag | ele_b->hflag;
}
-BM_INLINE void BM_elem_index_set(void *element, const int index)
+
+BM_INLINE void _bm_elem_index_set(BMHeader *ele, const int index)
{
- ((BMHeader *)element)->index = index;
+ ele->index = index;
}
-BM_INLINE int BM_elem_index_get(const void *element)
+BM_INLINE int _bm_elem_index_get(const BMHeader *ele)
{
- return ((BMHeader *)element)->index;
+ return ele->index;
}
#endif /* __BMESH_INLINE_C__ */
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c 2012-02-25 21:27:45 UTC (rev 44440)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c 2012-02-25 22:23:40 UTC (rev 44441)
@@ -55,7 +55,7 @@
static void recount_totsels(BMesh *bm)
{
BMIter iter;
- BMHeader *ele;
+ BMElem *ele;
const char iter_types[3] = {BM_VERTS_OF_MESH,
BM_EDGES_OF_MESH,
BM_FACES_OF_MESH};
@@ -124,7 +124,7 @@
if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) {
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
do {
- if (!BM_elem_flag_test(&(l_iter->e->head), BM_ELEM_SELECT)) {
+ if (!BM_elem_flag_test(l_iter->e, BM_ELEM_SELECT)) {
ok = FALSE;
break;
}
@@ -286,13 +286,13 @@
if (select) {
if (!BM_elem_flag_test(e, BM_ELEM_SELECT)) bm->totedgesel += 1;
- BM_elem_flag_enable(&(e->head), BM_ELEM_SELECT);
+ BM_elem_flag_enable(e, BM_ELEM_SELECT);
BM_elem_select_set(bm, e->v1, TRUE);
BM_elem_select_set(bm, e->v2, TRUE);
}
else {
if (BM_elem_flag_test(e, BM_ELEM_SELECT)) bm->totedgesel -= 1;
- BM_elem_flag_disable(&(e->head), BM_ELEM_SELECT);
+ BM_elem_flag_disable(e, BM_ELEM_SELECT);
if ( bm->selectmode == SCE_SELECT_EDGE ||
bm->selectmode == SCE_SELECT_FACE ||
@@ -352,7 +352,7 @@
bm->totfacesel++;
}
- BM_elem_flag_enable(&(f->head), BM_ELEM_SELECT);
+ BM_elem_flag_enable(f, BM_ELEM_SELECT);
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
do {
BM_vert_select_set(bm, l_iter->v, TRUE);
@@ -364,7 +364,7 @@
BMLoop *l;
if (BM_elem_flag_test(f, BM_ELEM_SELECT)) bm->totfacesel -= 1;
- BM_elem_flag_disable(&(f->head), BM_ELEM_SELECT);
+ BM_elem_flag_disable(f, BM_ELEM_SELECT);
/* flush down to edges */
BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) {
@@ -427,7 +427,7 @@
for (v = BM_iter_new(&verts, bm, BM_VERTS_OF_MESH, bm); v; v = BM_iter_step(&verts))
BM_elem_flag_disable(v, 0);
for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BM_iter_step(&edges)) {
- if (BM_elem_flag_test(&(e->head), BM_ELEM_SELECT)) {
+ if (BM_elem_flag_test(e, BM_ELEM_SELECT)) {
BM_edge_select_set(bm, e, TRUE);
}
}
@@ -437,7 +437,7 @@
for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BM_iter_step(&edges))
BM_elem_flag_disable(e, 0);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list