destruction of previous slot api. if it returns, it'll
authorJoseph Eagar <joeedh@gmail.com>
Thu, 22 Jan 2009 13:59:30 +0000 (13:59 +0000)
committerJoseph Eagar <joeedh@gmail.com>
Thu, 22 Jan 2009 13:59:30 +0000 (13:59 +0000)
be in the form of functions that return pointer
references to the slot data or something.

source/blender/bmesh/bmesh.h
source/blender/bmesh/bmesh_operators.h
source/blender/bmesh/intern/bmesh_operators.c
source/blender/bmesh/operators/dissolveops.c
source/blender/bmesh/operators/subdivideop.c
source/blender/bmesh/operators/triangulateop.c

index 09a3415fff0b4570a2810256add4c67dc088bf9c..1ee07dd9a832240637ffd6e09af57b6420c0c71b 100644 (file)
@@ -107,7 +107,6 @@ typedef struct BMNode {
        void *data;
 } BMNode;
 
-struct bmop_error;
 typedef struct BMesh {
        ListBase verts, edges, polys;
        struct BLI_mempool *vpool;
@@ -126,7 +125,7 @@ typedef struct BMesh {
        struct BLI_mempool *flagpool;                                   /*memory pool for dynamically allocated flag layers*/
        int stackdepth;                                                                 /*current depth of operator stack*/
        int totflags, walkers;                                                  /*total number of tool flag layers*/
-       ListBase errorstack; /*privately used by the operator error reporting system*/
+       ListBase errorstack;
 } BMesh;
 
 typedef struct BMVert {        
index 6a66b93b43fdb562ba31ac04f1b5e26858d46d8b..b7fd6cc5275d2e19d1a70b9a0f3f7a3dfecaa0bb 100644 (file)
@@ -30,30 +30,6 @@ typedef struct BMOpSlot{
        } data;
 }BMOpSlot;
 
-/*these macros are used for iterating over slot buffers.
-  for example:
-  int i;
-
-  for (ptr=BMOS_IterNewP(i, slot); ptr; ptr=BMOS_IterStepP(i, slot)) {
-  }
-
-  int ival;
-  for (ival=BMOS_IterNewI(i, slot); !BMOS_IterDoneI(i, slot); ival=BMOS_IterStepI(i, slot) {
-  }
-*/
-/*remember, the ',' operator executes all expressions seperated by ','
-  (left to right) but uses the value of the right-most one.*/
-#define BMOS_IterNewP(stateint, slot)  (stateint = 0, slot->len>0 ? *(void**)slot->data.p : NULL)
-#define BMOS_IterStepP(stateint, slot) (stateint++,stateint>=slot->len ? NULL : ((void**)slot->data.buf)[stateint])
-
-#define BMOS_IterNewF(stateint, slot)  (stateint = 0, slot->len>0 ? *(float*)slot->data.p : NULL)
-#define BMOS_IterDoneF(stateint, slot) (stateint >= slot->len)
-#define BMOS_IterStepF(stateint, slot) (stateint++,stateint>=slot->len ? NULL : ((float*)slot->data.buf)[stateint])
-
-#define BMOS_IterNewI(stateint, slot)  (stateint = 0, slot->len>0 ? *(int*)slot->data.p : NULL)
-#define BMOS_IterDoneI(stateint, slot) (stateint >= slot->len)
-#define BMOS_IterStepI(stateint, slot) (stateint++,stateint>=slot->len ? NULL : ((int*)slot->data.buf)[stateint])
-
 /*operators represent logical, executable mesh modules.*/
 #define BMOP_MAX_SLOTS                 16              /*way more than probably needed*/
 
@@ -108,15 +84,13 @@ int BMOP_PopError(BMesh *bm, char **msg);
 /*------ error code defines -------*/
 
 /*error messages*/
-#define BMERR_SELF_INTERSECTING        1
+#define BMERR_SELF_INTERSECTING        1
 
 static char *bmop_error_messages[] = {
-       0,
-       "Self intersection error",
+       0,
+       "Self intersection error",
 };
 
-#define BMERR_TOTAL (sizeof(error_messages) / sizeof(void*) - 1)
-
 /*------------begin operator defines (see bmesh_opdefines.c too)------------*/
 /*split op*/
 #define BMOP_SPLIT                             0
index d132a313d9d2a51438f73161253e33109fd8578a..231c0b999b40ef6daf0ad0f33e8bbd3972f3011e 100644 (file)
@@ -2,7 +2,6 @@
 
 #include "BLI_memarena.h"
 #include "BLI_mempool.h"
-#include "BLI_blenlib.h"
 
 #include "BKE_utildefines.h"
 
@@ -32,46 +31,6 @@ const int BMOP_OPSLOT_TYPEINFO[BMOP_OPSLOT_TYPES] = {
        sizeof(void*)   /* pointer buffer */
 };
 
-/*error system*/
-typedef struct bmop_error {
-       struct bmop_error *next, *prev;
-       int errorcode;
-       char *msg;
-} bmop_error;
-
-void BMOP_RaiseError(BMesh *bm, int errcode, char *msg)
-{
-       bmop_error *err = MEM_callocN(sizeof(bmop_error), "bmop_error");
-       err->errorcode = errcode;
-       err->msg = msg;
-       BLI_addhead(&bm->errorstack, err);
-}
-
-/*returns error code or 0 if no error*/
-int BMOP_GetError(BMesh *bm, char **msg)
-{
-       bmop_error *err = bm->errorstack.first;
-       if (!err) return 0;
-       
-       if (msg) *msg = err->msg;
-
-       return err->errorcode;
-}
-
-int BMOP_CheckError(BMesh *bm)
-{
-       return bm->errorstack.first != NULL;
-}
-
-int BMOP_PopError(BMesh *bm, char **msg) 
-{
-       int errorcode = BMOP_GetError(bm, msg);
-       if (errorcode)
-               BLI_remlink(&bm->errorstack, &bm->errorstack.first);
-
-       return errorcode;
-}
-
 /*
  * BMESH OPSTACK PUSH
  *
index 5146ea767076129d6eaf1c371d5198de38dc9e99..805531cf9ddef698d8d940226d8d21e0ce91b994 100644 (file)
@@ -43,7 +43,8 @@ void dissolveverts_exec(BMesh *bmesh, BMOperator *op)
        }
        */
 
-       for (vert=BMOS_IterNewP(i, vinput); vert; vert = BMOS_IterStepP(i, vinput)) {
+       for (i=0; i<vinput->len; i++) {
+               vert = ((BMVert**)vinput->data.p)[i];
                BM_Dissolve_Disk(bmesh, vert);
        }
 }
\ No newline at end of file
index bbf9f9f688cb82d0b9817aeef0a5fc99f9edbaf5..cd9d37cfae8204266a729a1215269cecf14ce429 100644 (file)
@@ -250,7 +250,8 @@ void esubdivide_exec(BMesh *bmesh, BMOperator *op)
        einput = BMO_GetSlot(op, BMOP_ESUBDIVIDE_EDGES);
 
        /*first go through and split edges*/
-       for (edge=BMOS_IterNewP(i, einput); edge; edge = BMOS_IterStepP(i, einput)) {
+       for (i=0; i<einput->len; i++) {
+               edge = ((BMEdge**)einput->data.p)[i];
                v1 = BM_Split_Edge(bmesh, edge->v1, edge, &nedge, 0.5, 1);
                BMO_SetFlag(bmesh, v1, SUBD_SPLIT);
                BMO_SetFlag(bmesh, nedge, SUBD_SPLIT);
index 338a9eeeb38fa81f4846f8175b23a98e8fba3f53..875fc79d2adb9cd59116ec3c2a57048581e27c65 100644 (file)
@@ -19,8 +19,10 @@ void triangulate_exec(BMesh *bmesh, BMOperator *op)
        int i, count = 0;
        
        finput = BMO_GetSlot(op, BMOP_ESUBDIVIDE_EDGES);
-       
-       for (face=BMOS_IterNewP(i, finput); face; face=BMOS_IterStepP(i, finput)) {
+
+       for (i=0; i<finput->len; i++) {
+               face = ((BMFace**)finput->data.p)[i];
+
                /*HACK! need to discuss with Briggs why the function takes an 
                  externally-allocated array of vert coordinates in the first place.*/
                if (face->len > 400) projverts = MEM_callocN(sizeof(float)*3*face->len, "projverts");