[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44144] branches/bmesh/blender/source/ blender/bmesh: some minor refactoring for edge disk link's, typedef their own struct type.
Campbell Barton
ideasman42 at gmail.com
Thu Feb 16 12:48:15 CET 2012
Revision: 44144
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44144
Author: campbellbarton
Date: 2012-02-16 11:48:09 +0000 (Thu, 16 Feb 2012)
Log Message:
-----------
some minor refactoring for edge disk link's, typedef their own struct type.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/bmesh/bmesh.h
branches/bmesh/blender/source/blender/bmesh/bmesh_class.h
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_interp.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_private.h
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_structure.c
branches/bmesh/blender/source/blender/bmesh/operators/bmo_create.c
Modified: branches/bmesh/blender/source/blender/bmesh/bmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh.h 2012-02-16 09:44:22 UTC (rev 44143)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh.h 2012-02-16 11:48:09 UTC (rev 44144)
@@ -278,8 +278,8 @@
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);
Modified: branches/bmesh/blender/source/blender/bmesh/bmesh_class.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh_class.h 2012-02-16 09:44:22 UTC (rev 44143)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh_class.h 2012-02-16 11:48:09 UTC (rev 44144)
@@ -59,9 +59,9 @@
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 @@
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 {
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_interp.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_interp.c 2012-02-16 09:44:22 UTC (rev 44143)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_interp.c 2012-02-16 11:48:09 UTC (rev 44144)
@@ -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 @@
* 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 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])
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c 2012-02-16 09:44:22 UTC (rev 44143)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c 2012-02-16 11:48:09 UTC (rev 44144)
@@ -341,8 +341,13 @@
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)
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_private.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_private.h 2012-02-16 09:44:22 UTC (rev 44143)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_private.h 2012-02-16 11:48:09 UTC (rev 44144)
@@ -50,10 +50,10 @@
__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);
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_structure.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_structure.c 2012-02-16 09:44:22 UTC (rev 44143)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_structure.c 2012-02-16 11:48:09 UTC (rev 44144)
@@ -65,12 +65,12 @@
{
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_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 @@
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;
}
Modified: branches/bmesh/blender/source/blender/bmesh/operators/bmo_create.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/bmo_create.c 2012-02-16 09:44:22 UTC (rev 44143)
+++ branches/bmesh/blender/source/blender/bmesh/operators/bmo_create.c 2012-02-16 11:48:09 UTC (rev 44144)
@@ -63,13 +63,7 @@
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 @@
/**** 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 @@
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);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list