[Bf-blender-cvs] [9084c57a658] soc-2018-bevel: Mark edges that can have seams in Bevel.

Rohan Rathi noreply at git.blender.org
Sat Jun 2 21:40:41 CEST 2018


Commit: 9084c57a65854b5ac50583527ecd58ebf6f4f7c6
Author: Rohan Rathi
Date:   Thu May 31 14:42:50 2018 +0530
Branches: soc-2018-bevel
https://developer.blender.org/rB9084c57a65854b5ac50583527ecd58ebf6f4f7c6

Mark edges that can have seams in Bevel.

Works by going clockwise from first edgehalf in BevVert and marking seam length
each time it encounters a pair of edges with seams

===================================================================

M	source/blender/bmesh/tools/bmesh_bevel.c

===================================================================

diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c
index ca96e5b4b78..ad0e3b9c36e 100644
--- a/source/blender/bmesh/tools/bmesh_bevel.c
+++ b/source/blender/bmesh/tools/bmesh_bevel.c
@@ -150,6 +150,7 @@ typedef struct BoundVert {
 	Profile profile;    /* edge profile between this and next BoundVert */
 	bool any_seam;      /* are any of the edges attached here seams? */
 	bool visited;       /* used during delta adjust pass */
+	int add_seam;
 //	int _pad;
 } BoundVert;	
 
@@ -1522,6 +1523,38 @@ static void snap_to_superellipsoid(float co[3], const float super_r, bool midlin
 	co[2] = z;
 }
 
+#define BEV_SEAM(eh) (BM_elem_flag_test(eh->e, BM_ELEM_SEAM))
+
+static void set_bound_vert_extend_seam_sharp_edges(BevVert *bv)
+{
+	EdgeHalf *e = &bv->edges[0], *efirst = &bv->edges[0];
+
+	while (!BEV_SEAM(e)) {
+		e = e->next;
+		if (e == efirst)
+			break;
+	}
+	if (!BEV_SEAM(e))
+		return;
+
+	efirst = e;
+	do {
+		int seam_length = 0;
+		EdgeHalf *ne = e->next;
+
+		while (!BEV_SEAM(ne) && ne != efirst) {
+			if(ne->is_bev)
+				seam_length++;
+			ne = ne->next;
+		}
+		if (ne == e || (ne == efirst && !BEV_SEAM(efirst))) {
+			break;
+		}
+		e->rightv->add_seam = seam_length ? seam_length : 0;
+		e = ne;
+	} while (e != efirst);
+}
+
 /* Set the any_seam property for a BevVert and all its BoundVerts */
 static void set_bound_vert_seams(BevVert *bv)
 {
@@ -1539,6 +1572,8 @@ static void set_bound_vert_seams(BevVert *bv)
 		}
 		bv->any_seam |= v->any_seam;
 	} while ((v = v->next) != bv->vmesh->boundstart);
+
+	set_bound_vert_extend_seam_sharp_edges(bv);
 }
 
 static int count_bound_vert_seams(BevVert *bv)



More information about the Bf-blender-cvs mailing list