[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54713] trunk/blender: Enable new bevel tool code in bevel modifier.
Howard Trickey
howard.trickey at gmail.com
Thu Feb 21 18:29:35 CET 2013
Revision: 54713
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54713
Author: howardt
Date: 2013-02-21 17:29:35 +0000 (Thu, 21 Feb 2013)
Log Message:
-----------
Enable new bevel tool code in bevel modifier.
Now modifier takes a segments parameter.
Bevel edge weights will multiply the overall amount.
For vertex-only, you can give a vertex group name,
and the weights in that will multiply the overall amount.
Modified Paths:
--------------
trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
trunk/blender/source/blender/blenkernel/BKE_bmesh.h
trunk/blender/source/blender/bmesh/operators/bmo_bevel.c
trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c
trunk/blender/source/blender/bmesh/tools/bmesh_bevel.h
trunk/blender/source/blender/makesrna/intern/rna_modifier.c
trunk/blender/source/blender/modifiers/intern/MOD_bevel.c
Modified: trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py 2013-02-21 17:18:27 UTC (rev 54712)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py 2013-02-21 17:29:35 UTC (rev 54713)
@@ -124,20 +124,17 @@
split.prop(md, "width")
split.prop(md, "use_only_vertices")
- # -- new modifier only, this may be reverted in favor of 2.62 mod.
- '''
- split = layout.split()
- split.prop(md, "use_even_offset")
- split.prop(md, "use_distance_offset")
- '''
- # -- end
+ layout.prop(md, "segments")
layout.label(text="Limit Method:")
layout.row().prop(md, "limit_method", expand=True)
if md.limit_method == 'ANGLE':
layout.prop(md, "angle_limit")
- elif md.limit_method == 'WEIGHT':
- layout.row().prop(md, "edge_weight_method", expand=True)
+ elif md.limit_method == 'VGROUP':
+ layout.label(text="Vertex Group:")
+ layout.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
+ # elif md.limit_method == 'WEIGHT':
+ # layout.row().prop(md, "edge_weight_method", expand=True)
def BOOLEAN(self, layout, ob, md):
split = layout.split()
Modified: trunk/blender/source/blender/blenkernel/BKE_bmesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_bmesh.h 2013-02-21 17:18:27 UTC (rev 54712)
+++ trunk/blender/source/blender/blenkernel/BKE_bmesh.h 2013-02-21 17:29:35 UTC (rev 54713)
@@ -38,7 +38,7 @@
/*NOTE: this is the bmesh 1.0 code. it's completely outdated.*/
/* uncomment to use the new bevel operator as a modifier */
-// #define USE_BM_BEVEL_OP_AS_MOD
+#define USE_BM_BEVEL_OP_AS_MOD
/* bevel tool defines */
/* element flags */
@@ -53,6 +53,7 @@
#define BME_BEVEL_RADIUS (1 << 2)
#define BME_BEVEL_ANGLE (1 << 3)
#define BME_BEVEL_WEIGHT (1 << 4)
+#define BME_BEVEL_VGROUP (1 << 5)
//~ #define BME_BEVEL_EWEIGHT (1<<4)
//~ #define BME_BEVEL_VWEIGHT (1<<5)
#define BME_BEVEL_PERCENT (1 << 6)
Modified: trunk/blender/source/blender/bmesh/operators/bmo_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_bevel.c 2013-02-21 17:18:27 UTC (rev 54712)
+++ trunk/blender/source/blender/bmesh/operators/bmo_bevel.c 2013-02-21 17:29:35 UTC (rev 54713)
@@ -55,7 +55,7 @@
}
}
- BM_mesh_bevel(bm, offset, seg, vonly);
+ BM_mesh_bevel(bm, offset, seg, vonly, false, NULL, -1);
BMO_slot_buffer_from_enabled_hflag(bm, op, op->slots_out, "faces.out", BM_FACE, BM_ELEM_TAG);
}
Modified: trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c 2013-02-21 17:18:27 UTC (rev 54712)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c 2013-02-21 17:29:35 UTC (rev 54713)
@@ -30,11 +30,15 @@
#include "MEM_guardedalloc.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
+
#include "BLI_array.h"
#include "BLI_math.h"
#include "BLI_memarena.h"
#include "BKE_customdata.h"
+#include "BKE_deform.h"
#include "bmesh.h"
#include "./intern/bmesh_private.h"
@@ -104,6 +108,7 @@
BMVert *v; /* original mesh vertex */
int edgecount; /* total number of edges around the vertex */
int selcount; /* number of selected edges around the vertex */
+ float offset; /* offset for this vertex, if vertex_only bevel */
EdgeHalf *edges; /* array of size edgecount; CCW order from vertex normal side */
VMesh *vmesh; /* mesh structure for replacing vertex */
} BevVert;
@@ -117,7 +122,10 @@
float offset; /* blender units to offset each side of a beveled edge */
int seg; /* number of segments in beveled edge profile */
- int vertex_only; /* bevel vertices only */
+ bool vertex_only; /* bevel vertices only */
+ bool use_weights; /* bevel amount affected by weights on edges or verts */
+ const struct MDeformVert *dvert; /* vertex group array, maybe set if vertex_only */
+ int vertex_group; /* vertex group index, maybe set if vertex_only */
} BevelParams;
// #pragma GCC diagnostic ignored "-Wpadded"
@@ -665,7 +673,7 @@
return;
}
- lastd = bp->vertex_only ? bp->offset : e->offset;
+ lastd = bp->vertex_only? bv->offset : e->offset;
vm->boundstart = NULL;
do {
if (e->is_bev) {
@@ -1722,6 +1730,7 @@
BMFace *f;
BMIter iter, iter2;
EdgeHalf *e;
+ float weight;
int i, found_shared_face, ccw_test_sum;
int nsel = 0;
int ntot = 0;
@@ -1760,11 +1769,24 @@
bv->v = v;
bv->edgecount = ntot;
bv->selcount = nsel;
+ bv->offset = bp->offset;
bv->edges = (EdgeHalf *)BLI_memarena_alloc(bp->mem_arena, ntot * sizeof(EdgeHalf));
bv->vmesh = (VMesh *)BLI_memarena_alloc(bp->mem_arena, sizeof(VMesh));
bv->vmesh->seg = bp->seg;
BLI_ghash_insert(bp->vert_hash, v, bv);
+ if (bp->vertex_only) {
+ /* if weighted, modify offset by weight */
+ if (bp->dvert != NULL && bp->vertex_group != -1) {
+ weight = defvert_find_weight(bp->dvert + BM_elem_index_get(v), bp->vertex_group);
+ if (weight <= 0.0f) {
+ BM_elem_flag_disable(v, BM_ELEM_TAG);
+ return;
+ }
+ bv->offset *= weight;
+ }
+ }
+
/* add edges to bv->edges in order that keeps adjacent edges sharing
* a face, if possible */
i = 0;
@@ -1815,7 +1837,16 @@
e->seg = 0;
}
e->is_rev = (bme->v2 == v);
- e->offset = e->is_bev ? bp->offset : 0.0f;
+ if (e->is_bev) {
+ e->offset = bp->offset;
+ if (bp->use_weights) {
+ weight = BM_elem_float_data_get(&bm->edata, bme, CD_BWEIGHT);
+ e->offset *= weight;
+ }
+ }
+ else {
+ e->offset = 0.0f;
+ }
}
/* find wrap-around shared face */
BM_ITER_ELEM (f, &iter2, bme, BM_FACES_OF_EDGE) {
@@ -2034,7 +2065,9 @@
*
* \warning all tagged edges _must_ be manifold.
*/
-void BM_mesh_bevel(BMesh *bm, const float offset, const float segments, const int vertex_only)
+void BM_mesh_bevel(BMesh *bm, const float offset, const float segments,
+ const bool vertex_only, const bool use_weights,
+ const struct MDeformVert *dvert, const int vertex_group)
{
BMIter iter;
BMVert *v;
@@ -2044,6 +2077,9 @@
bp.offset = offset;
bp.seg = segments;
bp.vertex_only = vertex_only;
+ bp.use_weights = use_weights;
+ bp.dvert = dvert;
+ bp.vertex_group = vertex_group;
if (bp.offset > 0) {
/* primary alloc */
Modified: trunk/blender/source/blender/bmesh/tools/bmesh_bevel.h
===================================================================
--- trunk/blender/source/blender/bmesh/tools/bmesh_bevel.h 2013-02-21 17:18:27 UTC (rev 54712)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_bevel.h 2013-02-21 17:29:35 UTC (rev 54713)
@@ -27,6 +27,10 @@
* \ingroup bmesh
*/
-void BM_mesh_bevel(BMesh *bm, const float offset, const float segments, const int vertex_only);
+struct MDeformVert;
+void BM_mesh_bevel(BMesh *bm, const float offset, const float segments,
+ const bool vertex_only, const bool use_weights,
+ const struct MDeformVert *dvert, const int vertex_group);
+
#endif /* __BMESH_BEVEL_H__ */
Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c 2013-02-21 17:18:27 UTC (rev 54712)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c 2013-02-21 17:29:35 UTC (rev 54713)
@@ -749,6 +749,12 @@
md->bevel_angle = (int)value;
}
+static void rna_BevelModifier_defgrp_name_set(PointerRNA *ptr, const char *value)
+{
+ BevelModifierData *md = (BevelModifierData *)ptr->data;
+ rna_object_vgroup_name_set(ptr, value, md->defgrp_name, sizeof(md->defgrp_name));
+}
+
static void rna_UVWarpModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
UVWarpModifierData *umd = (UVWarpModifierData *)ptr->data;
@@ -2291,11 +2297,13 @@
{0, "NONE", 0, "None", "Bevel the entire mesh by a constant amount"},
{BME_BEVEL_ANGLE, "ANGLE", 0, "Angle", "Only bevel edges with sharp enough angles between faces"},
{BME_BEVEL_WEIGHT, "WEIGHT", 0, "Weight",
- "Use bevel weights to determine how much bevel is applied; "
- "apply them separately in vert/edge select mode"},
+ "Use bevel weights to determine how much bevel is applied in edge mode"},
+ {BME_BEVEL_VGROUP, "VGROUP", 0, "Vertex Group",
+ "Use vertex group weights to determine how much bevel is applied in vertex mode"},
{0, NULL, 0, NULL, NULL}
};
+ /* TO BE DEPRECATED */
static EnumPropertyItem prop_edge_weight_method_items[] = {
{0, "AVERAGE", 0, "Average", ""},
{BME_BEVEL_EMIN, "SHARPEST", 0, "Sharpest", ""},
@@ -2315,6 +2323,12 @@
RNA_def_property_ui_text(prop, "Width", "Bevel value/amount");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
+ prop = RNA_def_property(srna, "segments", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "res");
+ RNA_def_property_range(prop, 1, 100);
+ RNA_def_property_ui_text(prop, "Segments", "Number of segments for round edges/verts");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
prop = RNA_def_property(srna, "use_only_vertices", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", BME_BEVEL_VERT);
RNA_def_property_ui_text(prop, "Only Vertices", "Bevel verts/corners, not edges");
@@ -2326,6 +2340,7 @@
RNA_def_property_ui_text(prop, "Limit Method", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
+ /* TO BE DEPRECATED */
prop = RNA_def_property(srna, "edge_weight_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "e_flags");
RNA_def_property_enum_items(prop, prop_edge_weight_method_items);
@@ -2348,16 +2363,11 @@
RNA_def_property_update(prop, 0, "rna_Modifier_update");
#ifdef USE_BM_BEVEL_OP_AS_MOD
- prop = RNA_def_property(srna, "use_even_offset", PROP_BOOLEAN, PROP_NONE); /* name matches solidify */
- RNA_def_property_boolean_sdna(prop, NULL, "flags", BME_BEVEL_EVEN);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list