[Bf-blender-cvs] [466e716495f] master: Bevel: add new 'Absolute' mode for interpreting 'amount' value.

Howard Trickey noreply at git.blender.org
Fri Jun 19 23:59:23 CEST 2020


Commit: 466e716495ffd8ed6030e6a5c7f64d78b774a9da
Author: Howard Trickey
Date:   Fri Jun 19 17:56:01 2020 -0400
Branches: master
https://developer.blender.org/rB466e716495ffd8ed6030e6a5c7f64d78b774a9da

Bevel: add new 'Absolute' mode for interpreting 'amount' value.

This mode is like Percent, but measures absolute distance along
adjacent edges instead of a percentage.
So, for example, if you use this mode with 2 segments and profile=1,
you will see the length that the bevel moves along unbeveled edges
between beveled ones will match the value specified.
Many users seem to expect this behavior, even though it means the
bevel width is uneven, so this option is for them.

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

M	source/blender/bmesh/intern/bmesh_opdefines.c
M	source/blender/bmesh/intern/bmesh_operators.h
M	source/blender/bmesh/tools/bmesh_bevel.c
M	source/blender/editors/mesh/editmesh_bevel.c
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/modifiers/intern/MOD_bevel.c

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

diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c
index 04cdc0020d9..ca34cd7d7e5 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -1724,6 +1724,7 @@ static BMO_FlagSet bmo_enum_bevel_offset_type[] = {
   {BEVEL_AMT_WIDTH, "WIDTH"},
   {BEVEL_AMT_DEPTH, "DEPTH"},
   {BEVEL_AMT_PERCENT, "PERCENT"},
+  {BEVEL_AMT_ABSOLUTE, "ABSOLUTE"},
   {0, NULL},
 };
 
diff --git a/source/blender/bmesh/intern/bmesh_operators.h b/source/blender/bmesh/intern/bmesh_operators.h
index 9f0107db693..b6c77c151e2 100644
--- a/source/blender/bmesh/intern/bmesh_operators.h
+++ b/source/blender/bmesh/intern/bmesh_operators.h
@@ -109,6 +109,7 @@ enum {
   BEVEL_AMT_WIDTH,
   BEVEL_AMT_DEPTH,
   BEVEL_AMT_PERCENT,
+  BEVEL_AMT_ABSOLUTE,
 };
 
 /* Bevel face_strength_mode values: should match face_str mode enum in DNA_modifer_types.h */
diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c
index 00b647555cf..7929a686a16 100644
--- a/source/blender/bmesh/tools/bmesh_bevel.c
+++ b/source/blender/bmesh/tools/bmesh_bevel.c
@@ -5949,12 +5949,23 @@ static BevVert *bevel_vert_construct(BMesh *bm, BevelParams *bp, BMVert *v)
           z = sinf(angle_v3v3v3(v1->co, v->co, v2->co));
           e->offset_r_spec = BM_edge_calc_length(e->next->e) * bp->offset * z / 100.0f;
           break;
+        case BEVEL_AMT_ABSOLUTE:
+          /* Like Percent, but the amount gives the absolute distance along adjacent edges. */
+          v1 = BM_edge_other_vert(e->prev->e, v);
+          v2 = BM_edge_other_vert(e->e, v);
+          z = sinf(angle_v3v3v3(v1->co, v->co, v2->co));
+          e->offset_l_spec = bp->offset * z;
+          v1 = BM_edge_other_vert(e->e, v);
+          v2 = BM_edge_other_vert(e->next->e, v);
+          z = sinf(angle_v3v3v3(v1->co, v->co, v2->co));
+          e->offset_r_spec = bp->offset * z;
+          break;
         default:
           BLI_assert(!"bad bevel offset kind");
           e->offset_l_spec = bp->offset;
           break;
       }
-      if (bp->offset_type != BEVEL_AMT_PERCENT) {
+      if (bp->offset_type != BEVEL_AMT_PERCENT && bp->offset_type != BEVEL_AMT_ABSOLUTE) {
         e->offset_r_spec = e->offset_l_spec;
       }
       if (bp->use_weights) {
@@ -6000,6 +6011,10 @@ static BevVert *bevel_vert_construct(BMesh *bm, BevelParams *bp, BMVert *v)
           e->offset_l_spec = BM_edge_calc_length(e->e) * bv->offset / 100.0f;
           break;
         }
+        case BEVEL_AMT_ABSOLUTE: {
+          e->offset_l_spec = bv->offset;
+          break;
+        }
       }
       e->offset_r_spec = e->offset_l_spec;
     }
@@ -7282,7 +7297,8 @@ void BM_mesh_bevel(BMesh *bm,
     }
 
     /* Perhaps do a pass to try to even out widths. */
-    if (!bp.vertex_only && bp.offset_adjust && bp.offset_type != BEVEL_AMT_PERCENT) {
+    if (!bp.vertex_only && bp.offset_adjust && bp.offset_type != BEVEL_AMT_PERCENT &&
+        bp.offset_type != BEVEL_AMT_ABSOLUTE) {
       adjust_offsets(&bp, bm);
     }
 
diff --git a/source/blender/editors/mesh/editmesh_bevel.c b/source/blender/editors/mesh/editmesh_bevel.c
index e94412233ff..9f80e63eb60 100644
--- a/source/blender/editors/mesh/editmesh_bevel.c
+++ b/source/blender/editors/mesh/editmesh_bevel.c
@@ -1012,6 +1012,11 @@ void MESH_OT_bevel(wmOperatorType *ot)
        "Depth",
        "Amount is perpendicular distance from original edge to bevel face"},
       {BEVEL_AMT_PERCENT, "PERCENT", 0, "Percent", "Amount is percent of adjacent edge length"},
+      {BEVEL_AMT_ABSOLUTE,
+       "ABSOLUTE",
+       0,
+       "Absolute",
+       "Amount is absolute distance along adjacent edge"},
       {0, NULL, 0, NULL, NULL},
   };
 
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 1413db4baea..3b21cf1ccda 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -446,6 +446,7 @@ enum {
   MOD_BEVEL_AMT_WIDTH = 1,
   MOD_BEVEL_AMT_DEPTH = 2,
   MOD_BEVEL_AMT_PERCENT = 3,
+  MOD_BEVEL_AMT_ABSOLUTE = 4,
 };
 
 /* BevelModifierData->edge_flags */
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 4d909ee2874..9718357420a 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -3948,6 +3948,11 @@ static void rna_def_modifier_bevel(BlenderRNA *brna)
        0,
        "Percent",
        "Amount is percent of adjacent edge length"},
+      {MOD_BEVEL_AMT_ABSOLUTE,
+       "ABSOLUTE",
+       0,
+       "Absolute",
+       "Amount is absolute distance along adjacent edge"},
       {0, NULL, 0, NULL, NULL},
   };
 
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index 35e3bb97fc3..5003827852a 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -302,6 +302,9 @@ static void panel_draw(const bContext *C, Panel *panel)
       case BEVEL_AMT_OFFSET:
         offset_name = "Offset";
         break;
+      case BEVEL_AMT_ABSOLUTE:
+        offset_name = "Absolute";
+        break;
     }
     uiItemR(col, &ptr, "width", 0, IFACE_(offset_name), ICON_NONE);
   }



More information about the Bf-blender-cvs mailing list