diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-02-16 15:48:09 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-02-16 15:48:09 +0400 |
commit | f241451d1743afb1b2d9453c45a2529a58efb745 (patch) | |
tree | fcf4eb947bf97449401ea8c9e4c29a27473639e4 | |
parent | 5fe525a6f634d1fbef212505f5669977cdbeff4b (diff) |
some minor refactoring for edge disk link's, typedef their own struct type.
-rw-r--r-- | source/blender/bmesh/bmesh.h | 4 | ||||
-rw-r--r-- | source/blender/bmesh/bmesh_class.h | 20 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_interp.c | 10 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_newcore.c | 7 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_private.h | 6 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_structure.c | 54 | ||||
-rw-r--r-- | source/blender/bmesh/operators/bmo_create.c | 43 |
7 files changed, 72 insertions, 72 deletions
diff --git a/source/blender/bmesh/bmesh.h b/source/blender/bmesh/bmesh.h index 3684fd7aead..a9936c31b36 100644 --- a/source/blender/bmesh/bmesh.h +++ b/source/blender/bmesh/bmesh.h @@ -278,8 +278,8 @@ void BM_face_multires_bounds_smooth(BMesh *bm, BMFace *f); void BM_loop_interp_multires(BMesh *bm, BMLoop *target, BMFace *source); void BM_vert_interp_from_face(BMesh *bm, BMVert *v, BMFace *source); -void BM_data_interp_from_verts(BMesh *bm, BMVert *v1, BMVert *v2, BMVert *v, float fac); -void BM_data_interp_face_vert_edge(BMesh *bm, BMVert *v1, BMVert *v2, BMVert *v, struct BMEdge *e1, float fac); +void BM_data_interp_from_verts(BMesh *bm, BMVert *v1, BMVert *v2, BMVert *v, const float fac); +void BM_data_interp_face_vert_edge(BMesh *bm, BMVert *v1, BMVert *v2, BMVert *v, struct BMEdge *e1, const float fac); void BM_data_layer_add(BMesh *em, CustomData *data, int type); void BM_data_layer_add_named(BMesh *bm, CustomData *data, int type, const char *name); void BM_data_layer_free(BMesh *em, CustomData *data, int type); diff --git a/source/blender/bmesh/bmesh_class.h b/source/blender/bmesh/bmesh_class.h index 2802233d9f2..25443051027 100644 --- a/source/blender/bmesh/bmesh_class.h +++ b/source/blender/bmesh/bmesh_class.h @@ -59,9 +59,9 @@ typedef struct BMHeader { char hflag; /* this would be a CD layer, see below */ } BMHeader; -/*note: need some way to specify custom locations for custom data layers. so we can -make them point directly into structs. and some way to make it only happen to the -active layer, and properly update when switching active layers.*/ +/* note: need some way to specify custom locations for custom data layers. so we can + * make them point directly into structs. and some way to make it only happen to the + * active layer, and properly update when switching active layers.*/ typedef struct BMVert { BMHeader head; @@ -70,18 +70,18 @@ typedef struct BMVert { struct BMEdge *e; } BMVert; +/* disk link structure, only used by edges */ +typedef struct BMDiskLink { + struct BMEdge *next, *prev; +} BMDiskLink; + typedef struct BMEdge { BMHeader head; struct BMVert *v1, *v2; struct BMLoop *l; - /*disk cycle pointers*/ - struct { - struct BMEdge *next, *prev; - } dlink1; - struct { - struct BMEdge *next, *prev; - } dlink2; + /* disk cycle pointers */ + BMDiskLink v1_disk_link, v2_disk_link; } BMEdge; typedef struct BMLoop { diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c index 13b13fdf3cf..d5f22690d63 100644 --- a/source/blender/bmesh/intern/bmesh_interp.c +++ b/source/blender/bmesh/intern/bmesh_interp.c @@ -50,7 +50,7 @@ * * Interpolates per-vertex data from two sources to a target. */ -void BM_data_interp_from_verts(BMesh *bm, BMVert *v1, BMVert *v2, BMVert *v, float fac) +void BM_data_interp_from_verts(BMesh *bm, BMVert *v1, BMVert *v2, BMVert *v, const float fac) { if (v1->head.data && v2->head.data) { /* first see if we can avoid interpolation */ @@ -108,7 +108,7 @@ static void UNUSED_FUNCTION(BM_Data_Vert_Average)(BMesh *UNUSED(bm), BMFace *UNU * Nothing */ -void BM_data_interp_face_vert_edge(BMesh *bm, BMVert *v1, BMVert *UNUSED(v2), BMVert *v, BMEdge *e1, float fac) +void BM_data_interp_face_vert_edge(BMesh *bm, BMVert *v1, BMVert *UNUSED(v2), BMVert *v, BMEdge *e1, const float fac) { void *src[2]; float w[2]; @@ -295,9 +295,9 @@ static void cent_quad_v3_d(double *cent, double *v1, double *v2, double *v3, dou static void UNUSED_FUNCTION(cent_tri_v3_d)(double *cent, double *v1, double *v2, double *v3) { - cent[0] = 0.33333 * (v1[0] + v2[0] + v3[0]); - cent[1] = 0.33333 * (v1[1] + v2[1] + v3[1]); - cent[2] = 0.33333 * (v1[2] + v2[2] + v3[2]); + cent[0] = (1.0 / 3.0) * (v1[0] + v2[0] + v3[0]); + cent[1] = (1.0 / 3.0) * (v1[1] + v2[1] + v3[1]); + cent[2] = (1.0 / 3.0) * (v1[2] + v2[2] + v3[2]); } static void UNUSED_FUNCTION(cross_v3_v3v3_d)(double r[3], const double a[3], const double b[3]) diff --git a/source/blender/bmesh/intern/bmesh_newcore.c b/source/blender/bmesh/intern/bmesh_newcore.c index 2d267bd0835..5c738b3e028 100644 --- a/source/blender/bmesh/intern/bmesh_newcore.c +++ b/source/blender/bmesh/intern/bmesh_newcore.c @@ -341,8 +341,13 @@ int bmesh_check_element(BMesh *UNUSED(bm), void *element, const char htype) err |= 8; if (e->l && e->l->f->head.htype != BM_FACE) err |= 16; - if (e->dlink1.prev == NULL || e->dlink2.prev == NULL || e->dlink1.next == NULL || e->dlink2.next == NULL) + if (e->v1_disk_link.prev == NULL || + e->v2_disk_link.prev == NULL || + e->v1_disk_link.next == NULL || + e->v2_disk_link.next == NULL) + { err |= 32; + } if (e->l && (e->l->radial_next == NULL || e->l->radial_prev == NULL)) err |= 64; if (e->l && e->l->f->len <= 0) diff --git a/source/blender/bmesh/intern/bmesh_private.h b/source/blender/bmesh/intern/bmesh_private.h index 399fb3dbfa8..d362479c4d1 100644 --- a/source/blender/bmesh/intern/bmesh_private.h +++ b/source/blender/bmesh/intern/bmesh_private.h @@ -50,10 +50,10 @@ int bmesh_check_element(BMesh *bm, void *element, const char htype); __LINE__, __FILE__); \ } -#define BM_EDGE_LINK_GET(e, v) ( \ +#define BM_EDGE_DISK_LINK_GET(e, v) ( \ ((v) == ((BMEdge*)(e))->v1) ? \ - (Link *)&(((BMEdge*)(e))->dlink1) : \ - (Link *)&(((BMEdge*)(e))->dlink2) \ + &((e)->v1_disk_link) : \ + &((e)->v2_disk_link) \ ) int bmesh_radial_length(struct BMLoop *l); diff --git a/source/blender/bmesh/intern/bmesh_structure.c b/source/blender/bmesh/intern/bmesh_structure.c index 0177bbe5fd3..268d8bfa346 100644 --- a/source/blender/bmesh/intern/bmesh_structure.c +++ b/source/blender/bmesh/intern/bmesh_structure.c @@ -65,12 +65,12 @@ int bmesh_edge_swapverts(BMEdge *e, BMVert *orig, BMVert *newv) { if (e->v1 == orig) { e->v1 = newv; - e->dlink1.next = e->dlink1.prev = NULL; + e->v1_disk_link.next = e->v1_disk_link.prev = NULL; return TRUE; } else if (e->v2 == orig) { e->v2 = newv; - e->dlink2.next = e->dlink2.prev = NULL; + e->v2_disk_link.next = e->v2_disk_link.prev = NULL; return TRUE; } return FALSE; @@ -151,24 +151,24 @@ int bmesh_edge_swapverts(BMEdge *e, BMVert *orig, BMVert *newv) int bmesh_disk_append_edge(struct BMEdge *e, struct BMVert *v) { if (!v->e) { - Link *e1 = BM_EDGE_LINK_GET(e, v); + BMDiskLink *dl1 = BM_EDGE_DISK_LINK_GET(e, v); v->e = e; - e1->next = e1->prev = (Link *)e; + dl1->next = dl1->prev = e; } else { - Link *e1, *e2, *e3; + BMDiskLink *dl1, *dl2, *dl3; - e1 = BM_EDGE_LINK_GET(e, v); - e2 = BM_EDGE_LINK_GET(v->e, v); - e3 = e2->prev ? BM_EDGE_LINK_GET(e2->prev, v) : NULL; + dl1 = BM_EDGE_DISK_LINK_GET(e, v); + dl2 = BM_EDGE_DISK_LINK_GET(v->e, v); + dl3 = dl2->prev ? BM_EDGE_DISK_LINK_GET(dl2->prev, v) : NULL; - e1->next = (Link *)v->e; - e1->prev = e2->prev; + dl1->next = v->e; + dl1->prev = dl2->prev; - e2->prev = (Link *)e; - if (e3) - e3->next = (Link *)e; + dl2->prev = e; + if (dl3) + dl3->next = e; } return TRUE; @@ -176,40 +176,40 @@ int bmesh_disk_append_edge(struct BMEdge *e, struct BMVert *v) void bmesh_disk_remove_edge(struct BMEdge *e, struct BMVert *v) { - Link *e1, *e2; + BMDiskLink *dl1, *dl2; - e1 = BM_EDGE_LINK_GET(e, v); - if (e1->prev) { - e2 = BM_EDGE_LINK_GET(e1->prev, v); - e2->next = e1->next; + dl1 = BM_EDGE_DISK_LINK_GET(e, v); + if (dl1->prev) { + dl2 = BM_EDGE_DISK_LINK_GET(dl1->prev, v); + dl2->next = dl1->next; } - if (e1->next) { - e2 = BM_EDGE_LINK_GET(e1->next, v); - e2->prev = e1->prev; + if (dl1->next) { + dl2 = BM_EDGE_DISK_LINK_GET(dl1->next, v); + dl2->prev = dl1->prev; } if (v->e == e) - v->e = (e != (BMEdge *)e1->next) ? (BMEdge *)e1->next : NULL; + v->e = (e != (BMEdge *)dl1->next) ? (BMEdge *)dl1->next : NULL; - e1->next = e1->prev = NULL; + dl1->next = dl1->prev = NULL; } struct BMEdge *bmesh_disk_nextedge(struct BMEdge *e, struct BMVert *v) { if (v == e->v1) - return e->dlink1.next; + return e->v1_disk_link.next; if (v == e->v2) - return e->dlink2.next; + return e->v2_disk_link.next; return NULL; } static BMEdge *bmesh_disk_prevedge(BMEdge *e, BMVert *v) { if (v == e->v1) - return e->dlink1.prev; + return e->v1_disk_link.prev; if (v == e->v2) - return e->dlink2.prev; + return e->v2_disk_link.prev; return NULL; } diff --git a/source/blender/bmesh/operators/bmo_create.c b/source/blender/bmesh/operators/bmo_create.c index 5deaa516d3d..325156aa568 100644 --- a/source/blender/bmesh/operators/bmo_create.c +++ b/source/blender/bmesh/operators/bmo_create.c @@ -63,13 +63,7 @@ typedef struct PathBase { typedef struct EdgeData { int tag; int ftag; - - struct { - struct BMEdge *next, *prev; - } dlink1; - struct { - struct BMEdge *next, *prev; - } dlink2; + BMDiskLink v1_disk_link, v2_disk_link; } EdgeData; typedef struct VertData { @@ -82,10 +76,10 @@ static int count_edge_faces(BMesh *bm, BMEdge *e); /**** rotation system code * */ -#define RS_GET_EDGE_LINK(e, v, ed) ( \ +#define RS_GET_EDGE_LINK(e, v, e_data) ( \ (v) == ((BMEdge *)(e))->v1 ? \ - (Link *)&(((EdgeData *)(ed))->dlink1) : \ - (Link *)&(((EdgeData *)(ed))->dlink2) \ + &(((EdgeData *)(e_data))->v1_disk_link) : \ + &(((EdgeData *)(e_data))->v2_disk_link) \ ) @@ -102,19 +96,20 @@ static int rotsys_append_edge(struct BMEdge *e, struct BMVert *v, e1->next = e1->prev = (Link *)e; } else { - Link *e1, *e2, *e3; + BMDiskLink *dl1, *dl2, *dl3; EdgeData *ved = &edata[BM_elem_index_get(vd->e)]; - e1 = RS_GET_EDGE_LINK(e, v, ed); - e2 = RS_GET_EDGE_LINK(vd->e, v, ved); - e3 = e2->prev ? RS_GET_EDGE_LINK(e2->prev, v, &edata[BM_elem_index_get(e2->prev)]) : NULL; + dl1 = RS_GET_EDGE_LINK(e, v, ed); + dl2 = RS_GET_EDGE_LINK(vd->e, v, ved); + dl3 = dl2->prev ? RS_GET_EDGE_LINK(dl2->prev, v, &edata[BM_elem_index_get(dl2->prev)]) : NULL; - e1->next = (Link *)vd->e; - e1->prev = e2->prev; + dl1->next = vd->e; + dl1->prev = dl2->prev; - e2->prev = (Link *)e; - if (e3) - e3->next = (Link *)e; + dl2->prev = e; + if (dl3) { + dl3->next = e; + } } return TRUE; @@ -125,7 +120,7 @@ static void UNUSED_FUNCTION(rotsys_remove_edge)(struct BMEdge *e, struct BMVert { EdgeData *ed = edata + BM_elem_index_get(e); VertData *vd = vdata + BM_elem_index_get(v); - Link *e1, *e2; + BMDiskLink *e1, *e2; e1 = RS_GET_EDGE_LINK(e, v, ed); if (e1->prev) { @@ -148,9 +143,9 @@ static struct BMEdge *rotsys_nextedge(struct BMEdge *e, struct BMVert *v, EdgeData *edata, VertData *UNUSED(vdata)) { if (v == e->v1) - return edata[BM_elem_index_get(e)].dlink1.next; + return edata[BM_elem_index_get(e)].v1_disk_link.next; if (v == e->v2) - return edata[BM_elem_index_get(e)].dlink2.next; + return edata[BM_elem_index_get(e)].v2_disk_link.next; return NULL; } @@ -158,9 +153,9 @@ static BMEdge *rotsys_prevedge(BMEdge *e, BMVert *v, EdgeData *edata, VertData *UNUSED(vdata)) { if (v == e->v1) - return edata[BM_elem_index_get(e)].dlink1.prev; + return edata[BM_elem_index_get(e)].v1_disk_link.prev; if (v == e->v2) - return edata[BM_elem_index_get(e)].dlink2.prev; + return edata[BM_elem_index_get(e)].v2_disk_link.prev; return NULL; } |