[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