[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18208] branches/bmesh/bmesh/tools/ BME_bevel.c: did a pass on the bevel code.

Joseph Eagar joeedh at gmail.com
Thu Jan 1 03:20:54 CET 2009


Revision: 18208
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18208
Author:   joeedh
Date:     2009-01-01 03:20:49 +0100 (Thu, 01 Jan 2009)

Log Message:
-----------
did a pass on the bevel code.  still much to do there, but later.

Modified Paths:
--------------
    branches/bmesh/bmesh/tools/BME_bevel.c

Modified: branches/bmesh/bmesh/tools/BME_bevel.c
===================================================================
--- branches/bmesh/bmesh/tools/BME_bevel.c	2009-01-01 02:00:15 UTC (rev 18207)
+++ branches/bmesh/bmesh/tools/BME_bevel.c	2009-01-01 02:20:49 UTC (rev 18208)
@@ -68,7 +68,7 @@
 	MEM_freeN(td);
 }
 
-BME_TransData *BME_assign_transdata(BME_TransData_Head *td, BME_Mesh *bm, BMVert *v,
+BME_TransData *BME_assign_transdata(BME_TransData_Head *td, BMesh *bm, BMVert *v,
 		float *co, float *org, float *vec, float *loc,
 		float factor, float weight, float maxfactor, float *max) {
 	BME_TransData *vtd;
@@ -113,7 +113,7 @@
 	return BLI_memarena_alloc(td->ma, sizeof(float));
 }
 
-static int BME_bevel_is_split_vert(BME_Loop *l) {
+static int BME_bevel_is_split_vert(BMLoop *l) {
 	/* look for verts that have already been added to the edge when
 	 * beveling other polys; this can be determined by testing the
 	 * vert and the edges around it for originality
@@ -198,10 +198,10 @@
  * using the vert and the loop passed, get or make the split vert, set its coordinates
  * and transform properties, and set the max limits.
  * Finally, return the split vert. */
-static BMVert *BME_bevel_split_edge(BME_Mesh *bm, BMVert *v, BMVert *v1, BME_Loop *l, float *up_vec, float value, BME_TransData_Head *td) {
+static BMVert *BME_bevel_split_edge(BMesh *bm, BMVert *v, BMVert *v1, BMLoop *l, float *up_vec, float value, BME_TransData_Head *td) {
 	BME_TransData *vtd, *vtd1, *vtd2;
 	BMVert *sv, *v2, *v3, *ov;
-	BME_Loop *lv1, *lv2;
+	BMLoop *lv1, *lv2;
 	BMEdge *ne, *e1, *e2;
 	float maxfactor, scale, len, dis, vec1[3], vec2[3], t_up_vec[3];
 	int is_edge, forward, is_split_vert;
@@ -217,13 +217,13 @@
 			return NULL;
 		}
 		e1 = v->edge; /* we just use the first two edges */
-		e2 = BME_disk_nextedge(v->edge, v);
+		e2 = bmesh_disk_nextedge(v->edge, v);
 		if (e1 == e2) {
 			//printf("You need at least two edges to use BME_bevel_split_edge()\n");
 			return NULL;
 		}
-		v2 = BME_edge_getothervert(e1, v);
-		v3 = BME_edge_getothervert(e2, v);
+		v2 = BM_OtherEdgeVert(e1, v);
+		v3 = BM_OtherEdgeVert(e2, v);
 		if (v1 != v2 && v1 != v3) {
 			//printf("Error: more than 2 edges in v's disk cycle, or v1 does not share an edge with v\n");
 			return NULL;
@@ -234,8 +234,8 @@
 		else {
 			e1 = e2;
 		}
-		ov = BME_edge_getothervert(e1,v);
-		sv = BME_split_edge(bm,v,e1,&ne,0);
+		ov = BM_OtherEdgeVert(e1,v);
+		sv = BM_Split_Face(bm,v,e1,&ne,0);
 		//BME_data_interp_from_verts(bm, v, ov, sv, 0.25); /*this is technically wrong...*/
 		//BME_data_interp_from_faceverts(bm, v, ov, sv, 0.25);
 		//BME_data_interp_from_faceverts(bm, ov, v, sv, 0.25);
@@ -277,8 +277,8 @@
 		}
 		else {
 			is_split_vert = 0;
-			ov = BME_edge_getothervert(l->e,v);
-			sv = BME_split_edge(bm,v,l->e,&ne,0);
+			ov = BM_OtherEdgeVert(l->e,v);
+			sv = BM_Split_Face(bm,v,l->e,&ne,0);
 			//BME_data_interp_from_verts(bm, v, ov, sv, 0.25); /*this is technically wrong...*/
 			//BME_data_interp_from_faceverts(bm, v, ov, sv, 0.25);
 			//BME_data_interp_from_faceverts(bm, ov, v, sv, 0.25);
@@ -395,11 +395,11 @@
 	return max;
 }
 
-static BMVert *BME_bevel_wire(BME_Mesh *bm, BMVert *v, float value, int res, int options, BME_TransData_Head *td) {
+static BMVert *BME_bevel_wire(BMesh *bm, BMVert *v, float value, int res, int options, BME_TransData_Head *td) {
 	BMVert *ov1, *ov2, *v1, *v2;
 
-	ov1 = BME_edge_getothervert(v->edge, v);
-	ov2 = BME_edge_getothervert(BME_disk_nextedge(v->edge, v), v);
+	ov1 = BM_OtherEdgeVert(v->edge, v);
+	ov2 = BM_OtherEdgeVert(bmesh_disk_nextedge(v->edge, v), v);
 
 	/* split the edges */
 	v1 = BME_bevel_split_edge(bm,v,ov1,NULL,NULL,value,td);
@@ -414,15 +414,20 @@
 
 	/* remove the original vert */
 	if (res) {
-		BME_JEKV(bm,v->edge,v);
+		bmesh_jekv;
+
+		//void BM_Collapse_Vert(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, int calcnorm){
+		//hrm, why is there a fac here? it just removes a vert
+		BM_Collapse_Vert(bm, v->edge, v, 1.0, 0);
+		//bmesh_jekv(bm,v->edge,v);
 	}
 
 	return v1;
 }
 
-static BME_Loop *BME_bevel_edge(BME_Mesh *bm, BME_Loop *l, float value, int options, float *up_vec, BME_TransData_Head *td) {
+static BMLoop *BME_bevel_edge(BMesh *bm, BMLoop *l, float value, int options, float *up_vec, BME_TransData_Head *td) {
 	BMVert *v1, *v2, *kv;
-	BME_Loop *kl=NULL, *nl;
+	BMLoop *kl=NULL, *nl;
 	BMEdge *e;
 	BMFace *f;
 
@@ -458,16 +463,16 @@
 	if (kv) {
 		l = l->next;
 		if (kl->v == kv) {
-			BME_split_face(bm,kl->f,kl->prev->v,kl->next->v,&nl,kl->prev->e);
-			BME_JFKE(bm,((BME_Loop*)kl->prev->radial.next->data)->f,kl->f,kl->prev->e);
-			BME_collapse_vert(bm, kl->e, kv, 1.0);
+			BM_Split_Face(bm,kl->f,kl->prev->v,kl->next->v,&nl,kl->prev->e);
+			bmesh_jfke(bm,((BMLoop*)kl->prev->radial.next->data)->f,kl->f,kl->prev->e);
+			BM_Collapse_Vert(bm, kl->e, kv, 1.0);
 			//BME_JEKV(bm,kl->e,kv);
 			
 		}
 		else {
-			BME_split_face(bm,kl->f,kl->next->next->v,kl->v,&nl,kl->next->e);
-			BME_JFKE(bm,((BME_Loop*)kl->next->radial.next->data)->f,kl->f,kl->next->e);
-			BME_collapse_vert(bm, kl->e, kv, 1.0);
+			BM_Split_Face(bm,kl->f,kl->next->next->v,kl->v,&nl,kl->next->e);
+			bmesh_jfke(bm,((BMLoop*)kl->next->radial.next->data)->f,kl->f,kl->next->e);
+			BM_Collapse_Vert(bm, kl->e, kv, 1.0);
 			//BME_JEKV(bm,kl->e,kv);
 		}
 		l = l->prev;
@@ -495,21 +500,21 @@
 	/* if we need to clean up geometry... */
 	if (kv) {
 		if (kl->v == kv) {
-			BME_split_face(bm,kl->f,kl->prev->v,kl->next->v,&nl,kl->prev->e);
-			BME_JFKE(bm,((BME_Loop*)kl->prev->radial.next->data)->f,kl->f,kl->prev->e);
-			BME_collapse_vert(bm, kl->e, kv, 1.0);
+			BM_Split_Face(bm,kl->f,kl->prev->v,kl->next->v,&nl,kl->prev->e);
+			bmesh_jfke(bm,((BMLoop*)kl->prev->radial.next->data)->f,kl->f,kl->prev->e);
+			BM_Collapse_Vert(bm, kl->e, kv, 1.0);
 			//BME_JEKV(bm,kl->e,kv);
 		}
 		else {
-			BME_split_face(bm,kl->f,kl->next->next->v,kl->v,&nl,kl->next->e);
-			BME_JFKE(bm,((BME_Loop*)kl->next->radial.next->data)->f,kl->f,kl->next->e);
-			BME_collapse_vert(bm, kl->e, kv, 1.0);
+			BM_Split_Face(bm,kl->f,kl->next->next->v,kl->v,&nl,kl->next->e);
+			bmesh_jfke(bm,((BMLoop*)kl->next->radial.next->data)->f,kl->f,kl->next->e);
+			BM_Collapse_Vert(bm, kl->e, kv, 1.0);
 			//BME_JEKV(bm,kl->e,kv);
 		}
 	}
 
 	if ((v1->tflag1 & BME_BEVEL_NONMAN)==0 || (v2->tflag1 & BME_BEVEL_NONMAN)==0) {
-		BME_split_face(bm,f,v2,v1,&l,e);
+		BM_Split_Face(bm,f,v2,v1,&l,e);
 		l->e->tflag1 = BME_BEVEL_BEVEL;
 		l = l->radial.next->data;
 	}
@@ -521,7 +526,7 @@
 	return l;
 }
 
-static BME_Loop *BME_bevel_vert(BME_Mesh *bm, BME_Loop *l, float value, int options, float *up_vec, BME_TransData_Head *td) {
+static BMLoop *BME_bevel_vert(BMesh *bm, BMLoop *l, float value, int options, float *up_vec, BME_TransData_Head *td) {
 	BMVert *v1, *v2;
 	BMFace *f;
 
@@ -536,7 +541,7 @@
 	l = l->next->next;
 
 	/* "cut off" this corner */
-	f = BME_split_face(bm,l->f,v2,v1,NULL,l->e);
+	f = BM_Split_Face(bm,l->f,v2,v1,NULL,l->e);
 
 	return l;
 }
@@ -554,8 +559,8 @@
  *	Returns -
  *  A BMFace pointer to the resulting inner face.
 */
-static BMFace *BME_bevel_poly(BME_Mesh *bm, BMFace *f, float value, int options, BME_TransData_Head *td) {
-	BME_Loop *l, *ol;
+static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BME_TransData_Head *td) {
+	BMLoop *l, *ol;
 	BME_TransData *vtd1, *vtd2;
 	float up_vec[3], vec1[3], vec2[3], vec3[3], fac1, fac2, max = -1;
 	int len, i;
@@ -640,7 +645,7 @@
 	return l->f;
 }
 
-static void BME_bevel_add_vweight(BME_TransData_Head *td, BME_Mesh *bm, BMVert *v, float weight, float factor, int options) {
+static void BME_bevel_add_vweight(BME_TransData_Head *td, BMesh *bm, BMVert *v, float weight, float factor, int options) {
 	BME_TransData *vtd;
 
 	if (v->tflag1 & BME_BEVEL_NONMAN) return;
@@ -674,7 +679,7 @@
 }
 
 
-static bevel_init_verts(BME_Mesh *bm, int options, BME_TransData_Head *td){
+static bevel_init_verts(BMesh *bm, int options, BME_TransData_Head *td){
 	BMVert *v;
 	float weight;
 	for(v=bm->verts.first; v; v=v->next){
@@ -692,7 +697,7 @@
 		}
 	}
 }
-static bevel_init_edges(BME_Mesh *bm, int options, BME_TransData_Head *td){
+static bevel_init_edges(BMesh *bm, int options, BME_TransData_Head *td){
 	BMEdge *e;
 	int count;
 	float weight;
@@ -721,34 +726,36 @@
 	/*clean up edges with 2 faces that share more than one edge*/
 	for( e = BM_first_element(bm, BME_EDGE); e; e = BM_next_element(bm, BME_EDGE, e)){
 		if(e->tflag1 & BME_BEVEL_BEVEL){
-			count = BM_face_sharededges(e->loop->f, ((BME_Loop*)e->loop->radial.next->data)->f);
+			count = BM_face_sharededges(e->loop->f, ((BMLoop*)e->loop->radial.next->data)->f);
 			if(count > 1) e->tflag1 &= ~BME_BEVEL_BEVEL;
 		}
 	}
 }
-static BME_Mesh *BME_bevel_initialize(BME_Mesh *bm, int options, int defgrp_index, float angle, BME_TransData_Head *td){
+static BMesh *BME_bevel_initialize(BMesh *bm, int options, int defgrp_index, float angle, BME_TransData_Head *td){
 
 	BMVert *v, *v2;
 	BMEdge *e, *curedge;
 	BMFace *f;
+	BMIter iter;
 	int wire, len;
+	
+	for (v = BMIter_New(&iter, bm, BM_VERTS, nm); v; v = BMIter_Step(&iter)) v->tflag1 = 0;
+	for (e = BMIter_New(&iter, bm, BM_EDGES, nm); e; e = BMIter_Step(&iter)) e->tflag1 = 0;
+	for (f = BMIter_New(&iter, bm, BM_FACES, nm); f; f = BMIter_Step(&iter)) f->tflag1 = 0;
 
-	for( v = BM_first_element(bm, BME_VERT); v; v = BM_next_element(bm, BME_VERT, v)) v->tflag1 = 0;
-	for( e = BM_first_element(bm, BME_EDGE); e; e = BM_next_element(bm, BME_EDGE, e)) e->tflag1 = 0;
-	for( f = BM_first_element(bm, BME_POLY); f; f = BM_next_element(bm, BME_POLY, f)) f->tflag1 = 0;
-
 	/*tag non-manifold geometry*/
-	for( v = BM_first_element(bm, BME_VERT); v; v = BM_next_element(bm, BME_VERT, v)){
+	for (v = BMIter_New(&iter, bm, BM_VERTS, nm); v; v = BMIter_Step(&iter)) {
 		v->tflag1 = BME_BEVEL_ORIG;
 		if(v->edge){ 
 			BME_assign_transdata(td, bm, v, v->co, v->co, NULL, NULL, 0, -1, -1, NULL); 
-			if (BME_is_nonmanifold_vert(bm,v)) v->tflag1 |= BME_BEVEL_NONMAN;
+			if (BM_Nonmanifold_Vert(bm,v)) v->tflag1 |= BME_BEVEL_NONMAN;
 			/*test wire vert*/
-			len = BME_cycle_length(BME_disk_getpointer(v->edge,v));
+			len = bmesh_cycle_length(bmesh_disk_getpointer(v->edge,v));
 			if(len == 2 && BME_wirevert(bm, v)) v->tflag1 &= ~BME_BEVEL_NONMAN;	
 		}else v->tflag1 |= BME_BEVEL_NONMAN;
 	}
-	for( e = BM_first_element(bm, BME_EDGE); e; e = BM_next_element(bm, BME_EDGE, e)){
+

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list