[Bf-blender-cvs] [cf008b012ae] soc-2019-bevel-profiles: Bevel cleanup: Angle kind enum, var rename for readability

Hans Goudey noreply at git.blender.org
Fri Aug 16 01:26:21 CEST 2019


Commit: cf008b012ae6537987c7feea6171df722aec8bbd
Author: Hans Goudey
Date:   Thu Aug 15 19:26:06 2019 -0400
Branches: soc-2019-bevel-profiles
https://developer.blender.org/rBcf008b012ae6537987c7feea6171df722aec8bbd

Bevel cleanup: Angle kind enum, var rename for readability

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

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 428aedcbadc..6beac8dcdb8 100644
--- a/source/blender/bmesh/tools/bmesh_bevel.c
+++ b/source/blender/bmesh/tools/bmesh_bevel.c
@@ -59,7 +59,7 @@
 #define BEVEL_MAX_AUTO_ADJUST_PCT 300.0f
 #define BEVEL_MATCH_SPEC_WEIGHT 0.2
 
-#define DEBUG_CUSTOM_PROFILE_CUTOFF
+//#define DEBUG_CUSTOM_PROFILE_CUTOFF
 
 #if defined(DEBUG_PROFILE_ORIENTATION_DRAW) || defined(DEBUG_CUSTOM_PROFILE_PIPE)
 static float debug_color_red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
@@ -277,6 +277,16 @@ typedef enum {
   F_RECON,
 } FKind;
 
+/** Helper for keeping track of angle kind. */
+enum {
+  /** Angle less than 180 degrees */
+  ANGLE_SMALLER = -1,
+  /** 180 degree angle */
+  ANGLE_STRAIGHT = 0,
+  /** Angle greater than 180 degrees */
+  ANGLE_LARGER = 1,
+};
+
 #if 0
 static const char* fkind_names[] = {"F_NONE", "F_ORIG", "F_VERT", "F_EDGE", "F_RECON"}; /* DEBUG */
 #endif
@@ -940,13 +950,13 @@ static int edges_angle_kind(EdgeHalf *e1, EdgeHalf *e2, BMVert *v)
   }
   dot = dot_v3v3(cross, no);
   if (fabsf(dot) < BEVEL_EPSILON_BIG) {
-    return 0;
+    return ANGLE_STRAIGHT;
   }
   else if (dot < 0.0f) {
-    return 1;
+    return ANGLE_LARGER;
   }
   else {
-    return -1;
+    return ANGLE_SMALLER;
   }
 }
 
@@ -2599,7 +2609,7 @@ static void build_boundary(BevelParams *bp, BevVert *bv, bool construct)
   BoundVert *v, *v1, *v2, *v3;
   VMesh *vm;
   float co[3], r;
-  int nip, nnip, miter_outer, miter_inner;
+  int in_plane, not_in_plane, miter_outer, miter_inner;
   int ang_kind;
 
   /* Current bevel does nothing if only one edge into a vertex */
@@ -2631,7 +2641,7 @@ static void build_boundary(BevelParams *bp, BevVert *bv, bool construct)
   /* keep track of the first beveled edge of an outside miter (there can be at most 1 per bv */
   emiter = NULL;
 
-  /* Here: there is more than one beveled edge.
+  /* There is more than one beveled edge.
    * We make BoundVerts to connect the sides of the beveled edges.
    * Non-beveled edges in between will just join to the appropriate juncture point. */
   e = efirst;
@@ -2641,26 +2651,26 @@ static void build_boundary(BevelParams *bp, BevVert *bv, bool construct)
     /* Make the BoundVert for the right side of e; other side will be made
      * when the beveled edge to the left of e is handled.
      * Analyze edges until next beveled edge.
-     * They are either "in plane" (preceding and subsequent faces are coplanar)
-     * or not. The "non-in-plane" edges effect silhouette and we prefer to slide
-     * along one of those if possible. */
-    nip = nnip = 0;    /* counts of in-plane / not-in-plane */
+     * They are either "in plane" (preceding and subsequent faces are coplanar) or not.
+     * The "non-in-plane" edges affect the silhouette and we prefer to slide along one of those if
+     * possible. */
+    in_plane = not_in_plane = 0; /* Counts of in-plane / not-in-plane */
     enip = eip = NULL; /* representatives of each */
     for (e2 = e->next; !e2->is_bev; e2 = e2->next) {
       if (eh_on_plane(e2)) {
-        nip++;
+        in_plane++;
         eip = e2;
       }
       else {
-        nnip++;
+        not_in_plane++;
         enip = e2;
       }
     }
-    if (nip == 0 && nnip == 0) {
+    if (in_plane == 0 && not_in_plane == 0) {
       offset_meet(e, e2, bv->v, e->fnext, false, co);
     }
-    else if (nnip > 0) {
-      if (bp->loop_slide && nnip == 1 && good_offset_on_edge_between(e, e2, enip, bv->v)) {
+    else if (not_in_plane > 0) {
+      if (bp->loop_slide && not_in_plane == 1 && good_offset_on_edge_between(e, e2, enip, bv->v)) {
         if (offset_on_edge_between(e, e2, enip, bv->v, co, &r)) {
           eon = enip;
         }
@@ -2670,8 +2680,8 @@ static void build_boundary(BevelParams *bp, BevVert *bv, bool construct)
       }
     }
     else {
-      /* nip > 0 and nnip == 0 */
-      if (bp->loop_slide && nip == 1 && good_offset_on_edge_between(e, e2, eip, bv->v)) {
+      /* n_in_plane > 0 and n_not_in_plane == 0 */
+      if (bp->loop_slide && in_plane == 1 && good_offset_on_edge_between(e, e2, eip, bv->v)) {
         if (offset_on_edge_between(e, e2, eip, bv->v, co, &r)) {
           eon = eip;
         }
@@ -2701,16 +2711,15 @@ static void build_boundary(BevelParams *bp, BevVert *bv, bool construct)
        * There can only be one outer reflex angle, so only one outer miter,
        * and emiter will be set to the first edge of such an edge.
        * A miter kind of BEVEL_MITER_SHARP means no special miter */
-
-      if ((miter_outer != BEVEL_MITER_SHARP && !emiter && ang_kind == 1) ||
-          (miter_inner != BEVEL_MITER_SHARP && ang_kind == -1)) {
-        if (ang_kind == 1) {
+      if ((miter_outer != BEVEL_MITER_SHARP && !emiter && ang_kind == ANGLE_LARGER) ||
+          (miter_inner != BEVEL_MITER_SHARP && ang_kind == ANGLE_SMALLER)) {
+        if (ang_kind == ANGLE_LARGER) {
           emiter = e;
         }
         /* make one or two more boundverts; for now all will have same co */
         v1 = v;
         v1->ebev = NULL;
-        if (ang_kind == 1 && miter_outer == BEVEL_MITER_PATCH) {
+        if (ang_kind == ANGLE_LARGER && miter_outer == BEVEL_MITER_PATCH) {
           v2 = add_new_bound_vert(mem_arena, vm, co);
         }
         else {
@@ -2722,7 +2731,7 @@ static void build_boundary(BevelParams *bp, BevVert *bv, bool construct)
         v3->elast = e2;
         v3->eon = NULL;
         e2->leftv = v3;
-        if (ang_kind == 1 && miter_outer == BEVEL_MITER_PATCH) {
+        if (ang_kind == ANGLE_LARGER && miter_outer == BEVEL_MITER_PATCH) {
           v1->is_patch_start = true;
           v2->eon = v1->eon;
           v2->sinratio = v1->sinratio;
@@ -2749,12 +2758,11 @@ static void build_boundary(BevelParams *bp, BevVert *bv, bool construct)
             v1->elast = v1->efirst;
           }
           else {
-            int between = nip + nnip;
+            int between = in_plane + not_in_plane;
             int bet2 = between / 2;
             bool betodd = (between % 2) == 1;
             int i = 0;
-            /* Put first half of in-between edges at index 0,
-             * second half at index bp->seg.
+            /* Put first half of in-between edges at index 0, second half at index bp->seg.
              * If between is odd, put middle one at midindex */
             for (e3 = e->next; e3 != e2; e3 = e3->next) {
               v1->elast = e3;
@@ -2775,13 +2783,13 @@ static void build_boundary(BevelParams *bp, BevVert *bv, bool construct)
     }
     else { /* construct == false */
       ang_kind = edges_angle_kind(e, e2, bv->v);
-      if ((miter_outer != BEVEL_MITER_SHARP && !emiter && ang_kind == 1) ||
-          (miter_inner != BEVEL_MITER_SHARP && ang_kind == -1)) {
-        if (ang_kind == 1) {
+      if ((miter_outer != BEVEL_MITER_SHARP && !emiter && ang_kind == ANGLE_LARGER) ||
+          (miter_inner != BEVEL_MITER_SHARP && ang_kind == ANGLE_SMALLER)) {
+        if (ang_kind == ANGLE_LARGER) {
           emiter = e;
         }
         v1 = e->rightv;
-        if (ang_kind == 1 && miter_outer == BEVEL_MITER_PATCH) {
+        if (ang_kind == ANGLE_LARGER && miter_outer == BEVEL_MITER_PATCH) {
           v2 = v1->next;
           v3 = v2->next;
         }
@@ -4784,7 +4792,7 @@ static void closer_v3_v3v3v3(float r[3], float a[3], float b[3], float v[3])
  */
 static VMesh *square_out_adj_vmesh(BevelParams *bp, BevVert *bv)
 {
-  int n_bndv, ns, ns2, odd, i, j, k, ikind, im1, clstride, iprev, akind;
+  int n_bndv, ns, ns2, odd, i, j, k, ikind, im1, clstride, iprev, ang_kind;
   float bndco[3], dir1[3], dir2[3], co1[3], co2[3], meet1[3], meet2[3], v1co[3], v2co[3];
   float *on_edge_cur, *on_edge_prev, *p;
   float ns2inv, finalfrac, ang;
@@ -4811,9 +4819,9 @@ static VMesh *square_out_adj_vmesh(BevelParams *bp, BevVert *bv)
     copy_v3_v3(bndco, bndv->nv.co);
     e1 = bndv->efirst;
     e2 = bndv->elast;
-    akind = 0;
+    ang_kind = ANGLE_STRAIGHT;
     if (e1 && e2) {
-      akind = edges_angle_kind(e1, e2, bv->v);
+      ang_kind = edges_angle_kind(e1, e2, bv->v);
     }
     if (bndv->is_patch_start) {
       mid_v3_v3v3(centerline + clstride * i, bndv->nv.co, bndv->next->nv.co);
@@ -4835,7 +4843,7 @@ static VMesh *square_out_adj_vmesh(BevelParams *bp, BevVert *bv)
       i++;
       /* leave cset[i] where it was - probably false, unless i == n - 1 */
     }
-    else if (akind < 0) {
+    else if (ang_kind == ANGLE_SMALLER) {
       sub_v3_v3v3(dir1, e1->e->v1->co, e1->e->v2->co);
       sub_v3_v3v3(dir2, e2->e->v1->co, e2->e->v2->co);
       add_v3_v3v3(co1, bndco, dir1);
@@ -5395,8 +5403,6 @@ static BMFace *bevel_build_poly(BevelParams *bp, BMesh *bm, BevVert *bv)
   BMVert **bmverts = NULL;
   BMEdge **bmedges = NULL;
   BMFace **bmfaces = NULL;
-  /* HANS-QUESTION: Why the same number of verts faces and edges? Why even declare an array of the
-   * faces and edges if we're only providing the vertices*/
   BLI_array_staticdeclare(bmverts, BM_DEFAULT_NGON_STACK_SIZE);
   BLI_array_staticdeclare(bmedges, BM_DEFAULT_NGON_STACK_SIZE);
   BLI_array_staticdeclare(bmfaces, BM_DEFAULT_NGON_STACK_SIZE);



More information about the Bf-blender-cvs mailing list