Revision: 45354
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45354
Author:   campbellbarton
Date:     2012-04-03 02:38:27 +0000 (Tue, 03 Apr 2012)
Log Message:
-----------
fix [#30772] No more than two subdivions give correct result when adding an 
icosphere

bug was introduced in r45297, which inadvertently broke testing for multiple 
flags at once.

added BM_elem_flag_test_bool() and BMO_elem_flag_test_bool() to get TRUE/FALSE 
results rather then the flag value.

Revision Links:
--------------
    
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45297

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_inline.h
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
    trunk/blender/source/blender/bmesh/intern/bmesh_operator_api.h
    trunk/blender/source/blender/bmesh/intern/bmesh_operator_api_inline.h
    trunk/blender/source/blender/bmesh/intern/bmesh_operators.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_inline.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_inline.h    2012-04-03 
02:16:27 UTC (rev 45353)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_inline.h    2012-04-03 
02:38:27 UTC (rev 45354)
@@ -30,18 +30,24 @@
 #define __BMESH_INLINE_H__
 
 /* stuff for dealing with header flags */
-#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)
+#define BM_elem_flag_test(     ele, hflag)      _bm_elem_flag_test     
(&(ele)->head, hflag)
+#define BM_elem_flag_test_bool(ele, hflag)      
_bm_elem_flag_test_bool(&(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)
 
 BLI_INLINE char _bm_elem_flag_test(const BMHeader *head, const char hflag)
 {
        return head->hflag & hflag;
 }
 
+BLI_INLINE short _bm_elem_flag_test_bool(const BMHeader *head, const char 
hflag)
+{
+       return (head->hflag & hflag) != 0;
+}
+
 BLI_INLINE void _bm_elem_flag_enable(BMHeader *head, const char hflag)
 {
        head->hflag |= hflag;

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c   2012-04-03 
02:16:27 UTC (rev 45353)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c   2012-04-03 
02:38:27 UTC (rev 45354)
@@ -449,29 +449,30 @@
  * counts number of elements with flag enabled/disabled
  */
 static int bm_mesh_flag_count(BMesh *bm, const char htype, const char hflag,
-                              int respecthide, int test_for_enabled)
+                              const short respecthide, const short 
test_for_enabled)
 {
        BMElem *ele;
        BMIter iter;
-       const char hflag_test = (test_for_enabled ? hflag : 0);
        int tot = 0;
 
+       BLI_assert(ELEM(TRUE, FALSE, test_for_enabled));
+
        if (htype & BM_VERT) {
                for (ele = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); ele; 
ele = BM_iter_step(&iter)) {
                        if (respecthide && BM_elem_flag_test(ele, 
BM_ELEM_HIDDEN)) continue;
-                       if (BM_elem_flag_test(ele, hflag) == hflag_test) tot++;
+                       if (BM_elem_flag_test_bool(ele, hflag) == 
test_for_enabled) tot++;
                }
        }
        if (htype & BM_EDGE) {
                for (ele = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); ele; 
ele = BM_iter_step(&iter)) {
                        if (respecthide && BM_elem_flag_test(ele, 
BM_ELEM_HIDDEN)) continue;
-                       if (BM_elem_flag_test(ele, hflag) == hflag_test) tot++;
+                       if (BM_elem_flag_test_bool(ele, hflag) == 
test_for_enabled) tot++;
                }
        }
        if (htype & BM_FACE) {
                for (ele = BM_iter_new(&iter, bm, BM_FACES_OF_MESH, NULL); ele; 
ele = BM_iter_step(&iter)) {
                        if (respecthide && BM_elem_flag_test(ele, 
BM_ELEM_HIDDEN)) continue;
-                       if (BM_elem_flag_test(ele, hflag) == hflag_test) tot++;
+                       if (BM_elem_flag_test_bool(ele, hflag) == 
test_for_enabled) tot++;
                }
        }
 

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_operator_api.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_operator_api.h      
2012-04-03 02:16:27 UTC (rev 45353)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_operator_api.h      
2012-04-03 02:38:27 UTC (rev 45354)
@@ -75,17 +75,19 @@
 
 struct GHashIterator;
 
-#define BMO_elem_flag_test(   bm, ele, oflag)      _bmo_elem_flag_test    (bm, 
(ele)->oflags, oflag)
-#define BMO_elem_flag_enable( bm, ele, oflag)      _bmo_elem_flag_enable  (bm, 
(ele)->oflags, oflag)
-#define BMO_elem_flag_disable(bm, ele, oflag)      _bmo_elem_flag_disable (bm, 
(ele)->oflags, oflag)
-#define BMO_elem_flag_set(    bm, ele, oflag, val) _bmo_elem_flag_set     (bm, 
(ele)->oflags, oflag, val)
-#define BMO_elem_flag_toggle( bm, ele, oflag)      _bmo_elem_flag_toggle  (bm, 
(ele)->oflags, oflag)
+#define BMO_elem_flag_test(     bm, ele, oflag)      _bmo_elem_flag_test     
(bm, (ele)->oflags, oflag)
+#define BMO_elem_flag_test_bool(bm, ele, oflag)      
_bmo_elem_flag_test_bool(bm, (ele)->oflags, oflag)
+#define BMO_elem_flag_enable(   bm, ele, oflag)      _bmo_elem_flag_enable   
(bm, (ele)->oflags, oflag)
+#define BMO_elem_flag_disable(  bm, ele, oflag)      _bmo_elem_flag_disable  
(bm, (ele)->oflags, oflag)
+#define BMO_elem_flag_set(      bm, ele, oflag, val) _bmo_elem_flag_set      
(bm, (ele)->oflags, oflag, val)
+#define BMO_elem_flag_toggle(   bm, ele, oflag)      _bmo_elem_flag_toggle   
(bm, (ele)->oflags, oflag)
 
-BLI_INLINE short _bmo_elem_flag_test(BMesh *bm, BMFlagLayer *oflags, const 
short oflag);
-BLI_INLINE void  _bmo_elem_flag_enable(BMesh *bm, BMFlagLayer *oflags, const 
short oflag);
-BLI_INLINE void  _bmo_elem_flag_disable(BMesh *bm, BMFlagLayer *oflags, const 
short oflag);
-BLI_INLINE void  _bmo_elem_flag_set(BMesh *bm, BMFlagLayer *oflags, const 
short oflag, int val);
-BLI_INLINE void  _bmo_elem_flag_toggle(BMesh *bm, BMFlagLayer *oflags, const 
short oflag);
+BLI_INLINE short _bmo_elem_flag_test(     BMesh *bm, BMFlagLayer *oflags, 
const short oflag);
+BLI_INLINE short _bmo_elem_flag_test_bool(BMesh *bm, BMFlagLayer *oflags, 
const short oflag);
+BLI_INLINE void  _bmo_elem_flag_enable(   BMesh *bm, BMFlagLayer *oflags, 
const short oflag);
+BLI_INLINE void  _bmo_elem_flag_disable(  BMesh *bm, BMFlagLayer *oflags, 
const short oflag);
+BLI_INLINE void  _bmo_elem_flag_set(      BMesh *bm, BMFlagLayer *oflags, 
const short oflag, int val);
+BLI_INLINE void  _bmo_elem_flag_toggle(   BMesh *bm, BMFlagLayer *oflags, 
const short oflag);
 
 /* slot type arrays are terminated by the last member
  * having a slot type of 0.*/
@@ -297,17 +299,17 @@
 
 /* copies the values from another slot to the end of the output slot */
 void BMO_slot_buffer_append(BMOperator *output_op, const char *output_op_slot,
-                                                       BMOperator *other_op, 
const char *other_op_slot);
+                            BMOperator *other_op, const char *other_op_slot);
 
 /* puts every element of type 'type' (which is a bitmask) with tool
  * flag 'flag', into a slot. */
 void BMO_slot_buffer_from_enabled_flag(BMesh *bm, BMOperator *op, const char 
*slotname,
-                                                                          
const char htype, const short oflag);
+                                       const char htype, const short oflag);
 
 /* puts every element of type 'type' (which is a bitmask) without tool
  * flag 'flag', into a slot. */
 void BMO_slot_buffer_from_disabled_flag(BMesh *bm, BMOperator *op, const char 
*slotname,
-                                                                               
const char htype, const short oflag);
+                                        const char htype, const short oflag);
 
 /* tool-flags all elements inside an element slot array with flag flag. */
 void BMO_slot_buffer_flag_enable(BMesh *bm, BMOperator *op, const char 
*slotname,
@@ -327,15 +329,15 @@
  * flag 'flag', into a slot.  note: ignores hidden elements
  * (e.g. elements with header flag BM_ELEM_HIDDEN set).*/
 void BMO_slot_buffer_from_enabled_hflag(BMesh *bm, BMOperator *op,
-                                                                               
const char *slotname,
-                                                                               
const char htype, const char hflag);
+                                        const char *slotname,
+                                        const char htype, const char hflag);
 
 /* puts every element of type 'type' (which is a bitmask) without
  * header flag 'flag', into a slot.  note: ignores hidden elements
  * (e.g. elements with header flag BM_ELEM_HIDDEN set).*/
 void BMO_slot_buffer_from_disabled_hflag(BMesh *bm, BMOperator *op,
-                                                                               
 const char *slotname,
-                                                                               
 const char htype, const char hflag);
+                                         const char *slotname,
+                                         const char htype, const char hflag);
 
 /* counts number of elements inside a slot array. */
 int BMO_slot_buffer_count(BMesh *bm, BMOperator *op, const char *slotname);

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_operator_api_inline.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_operator_api_inline.h       
2012-04-03 02:16:27 UTC (rev 45353)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_operator_api_inline.h       
2012-04-03 02:38:27 UTC (rev 45354)
@@ -40,9 +40,14 @@
 /* flags 15 and 16 (1 << 14 and 1 << 15) are reserved for bmesh api use */
 BLI_INLINE short _bmo_elem_flag_test(BMesh *bm, BMFlagLayer *oflags, const 
short oflag)
 {
-    return oflags[bm->stackdepth - 1].f & oflag;
+       return oflags[bm->stackdepth - 1].f & oflag;
 }
 
+BLI_INLINE short _bmo_elem_flag_test_bool(BMesh *bm, BMFlagLayer *oflags, 
const short oflag)
+{
+       return (oflags[bm->stackdepth - 1].f & oflag) != 0;
+}
+
 BLI_INLINE void _bmo_elem_flag_enable(BMesh *bm, BMFlagLayer *oflags, const 
short oflag)
 {
        oflags[bm->stackdepth - 1].f |= oflag;
@@ -65,13 +70,13 @@
 }
 
 BLI_INLINE void BMO_slot_map_int_insert(BMesh *bm, BMOperator *op, const char 
*slotname,
-                                       void *element, int val)
+                                        void *element, int val)
 {
        BMO_slot_map_insert(bm, op, slotname, element, &val, sizeof(int));
 }
 
 BLI_INLINE void BMO_slot_map_float_insert(BMesh *bm, BMOperator *op, const 
char *slotname,
-                                         void *element, float val)
+                                          void *element, float val)
 {
        BMO_slot_map_insert(bm, op, slotname, element, &val, sizeof(float));
 }
@@ -83,7 +88,7 @@
  * use BMO_slot_map_data_get and BMO_slot_map_insert, which copies the data. */
 

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to