[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