[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53352] trunk/blender/source/blender: Add 'vertex_only' option to bevel tool.
Howard Trickey
howard.trickey at gmail.com
Fri Dec 28 03:45:16 CET 2012
Revision: 53352
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53352
Author: howardt
Date: 2012-12-28 02:45:10 +0000 (Fri, 28 Dec 2012)
Log Message:
-----------
Add 'vertex_only' option to bevel tool.
Right now, changing segments to > 1 doesn't do anything,
but intend to work on making that cause rounded corners.
Modified Paths:
--------------
trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
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/editors/mesh/editmesh_tools.c
trunk/blender/source/blender/modifiers/intern/MOD_bevel.c
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c 2012-12-28 01:36:00 UTC (rev 53351)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c 2012-12-28 02:45:10 UTC (rev 53352)
@@ -1403,6 +1403,7 @@
{{"geom", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT | BM_EDGE | BM_FACE}}, /* input edges and vertices */
{"offset", BMO_OP_SLOT_FLT}, /* amount to offset beveled edge */
{"segments", BMO_OP_SLOT_INT}, /* number of segments in bevel */
+ {"vertex_only", BMO_OP_SLOT_BOOL}, /* only bevel vertices, not edges */
{{'\0'}},
},
/* slots_out */
Modified: trunk/blender/source/blender/bmesh/operators/bmo_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_bevel.c 2012-12-28 01:36:00 UTC (rev 53351)
+++ trunk/blender/source/blender/bmesh/operators/bmo_bevel.c 2012-12-28 02:45:10 UTC (rev 53352)
@@ -34,6 +34,7 @@
{
const float offset = BMO_slot_float_get(op->slots_in, "offset");
const int seg = BMO_slot_int_get(op->slots_in, "segments");
+ const int vonly = BMO_slot_bool_get(op->slots_in, "vertex_only");
if (offset > 0) {
BMOIter siter;
@@ -54,7 +55,7 @@
}
}
- BM_mesh_bevel(bm, offset, seg);
+ BM_mesh_bevel(bm, offset, seg, vonly);
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 2012-12-28 01:36:00 UTC (rev 53351)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c 2012-12-28 02:45:10 UTC (rev 53352)
@@ -119,6 +119,7 @@
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 */
} BevelParams;
// #pragma GCC diagnostic ignored "-Wpadded"
@@ -698,8 +699,9 @@
* of a vertex on the the boundary of the beveled vertex bv->v.
* Also decide on the mesh pattern that will be used inside the boundary.
* Doesn't make the actual BMVerts */
-static void build_boundary(MemArena *mem_arena, BevVert *bv)
+static void build_boundary(BevelParams *bp, BevVert *bv)
{
+ MemArena *mem_arena = bp->mem_arena;
EdgeHalf *efirst, *e;
BoundVert *v;
VMesh *vm;
@@ -707,9 +709,13 @@
const float *no;
float lastd;
- e = efirst = next_bev(bv, NULL);
vm = bv->vmesh;
+ if (bp->vertex_only)
+ e = efirst = &bv->edges[0];
+ else
+ e = efirst = next_bev(bv, NULL);
+
BLI_assert(bv->edgecount >= 2); /* since bevel edges incident to 2 faces */
if (bv->edgecount == 2 && bv->selcount == 1) {
@@ -734,7 +740,7 @@
return;
}
- lastd = e->offset;
+ lastd = bp->vertex_only ? bp->offset : e->offset;
vm->boundstart = NULL;
do {
if (e->is_bev) {
@@ -1325,8 +1331,9 @@
/* Given that the boundary is built, now make the actual BMVerts
* for the boundary and the interior of the vertex mesh. */
-static void build_vmesh(MemArena *mem_arena, BMesh *bm, BevVert *bv)
+static void build_vmesh(BevelParams *bp, BMesh *bm, BevVert *bv)
{
+ MemArena *mem_arena = bp->mem_arena;
VMesh *vm = bv->vmesh;
BoundVert *v, *weld1, *weld2;
int n, ns, ns2, i, k, weld;
@@ -1504,7 +1511,7 @@
*/
BM_ITER_ELEM (bme, &iter, v, BM_EDGES_OF_VERT) {
- if (BM_elem_flag_test(bme, BM_ELEM_TAG)) {
+ if (BM_elem_flag_test(bme, BM_ELEM_TAG) && !bp->vertex_only) {
BLI_assert(BM_edge_is_manifold(bme));
nsel++;
}
@@ -1513,7 +1520,7 @@
BM_BEVEL_EDGE_TAG_DISABLE(bme);
}
- if (nsel == 0) {
+ if ((nsel == 0 && !bp->vertex_only) || (ntot < 3 && bp->vertex_only)) {
/* signal this vert isn't being beveled */
BM_elem_flag_disable(v, BM_ELEM_TAG);
return;
@@ -1570,7 +1577,7 @@
}
bme = e->e;
BM_BEVEL_EDGE_TAG_ENABLE(bme);
- if (BM_elem_flag_test(bme, BM_ELEM_TAG)) {
+ if (BM_elem_flag_test(bme, BM_ELEM_TAG) && !bp->vertex_only) {
e->is_bev = TRUE;
e->seg = bp->seg;
}
@@ -1626,8 +1633,8 @@
BM_BEVEL_EDGE_TAG_DISABLE(e->e);
}
- build_boundary(bp->mem_arena, bv);
- build_vmesh(bp->mem_arena, bm, bv);
+ build_boundary(bp, bv);
+ build_vmesh(bp, bm, bv);
}
/* Face f has at least one beveled vertex. Rebuild f */
@@ -1790,7 +1797,7 @@
*
* \warning all tagged edges _must_ be manifold.
*/
-void BM_mesh_bevel(BMesh *bm, const float offset, const float segments)
+void BM_mesh_bevel(BMesh *bm, const float offset, const float segments, const int vertex_only)
{
BMIter iter;
BMVert *v;
@@ -1799,6 +1806,7 @@
bp.offset = offset;
bp.seg = segments;
+ bp.vertex_only = vertex_only;
if (bp.offset > 0) {
/* primary alloc */
@@ -1814,9 +1822,11 @@
}
/* Build polygons for edges */
- BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
- if (BM_elem_flag_test(e, BM_ELEM_TAG)) {
- bevel_build_edge_polygons(bm, &bp, e);
+ if (!bp.vertex_only) {
+ BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
+ if (BM_elem_flag_test(e, BM_ELEM_TAG)) {
+ bevel_build_edge_polygons(bm, &bp, e);
+ }
}
}
Modified: trunk/blender/source/blender/bmesh/tools/bmesh_bevel.h
===================================================================
--- trunk/blender/source/blender/bmesh/tools/bmesh_bevel.h 2012-12-28 01:36:00 UTC (rev 53351)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_bevel.h 2012-12-28 02:45:10 UTC (rev 53352)
@@ -27,6 +27,6 @@
* \ingroup bmesh
*/
-void BM_mesh_bevel(BMesh *bm, const float offset, const float segments);
+void BM_mesh_bevel(BMesh *bm, const float offset, const float segments, const int vertex_only);
#endif /* __BMESH_BEVEL_H__ */
Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c 2012-12-28 01:36:00 UTC (rev 53351)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c 2012-12-28 02:45:10 UTC (rev 53352)
@@ -4768,6 +4768,7 @@
#ifdef NEW_BEVEL
float offset = RNA_float_get(op->ptr, "offset");
int segments = RNA_int_get(op->ptr, "segments");
+ int vertex_only = RNA_boolean_get(op->ptr, "vertex_only");
/* revert to original mesh */
if (opdata->is_modal) {
@@ -4775,8 +4776,8 @@
}
if (!EDBM_op_init(em, &bmop, op,
- "bevel geom=%hev offset=%f segments=%i",
- BM_ELEM_SELECT, offset, segments))
+ "bevel geom=%hev offset=%f segments=%i vertex_only=%b",
+ BM_ELEM_SELECT, offset, segments, vertex_only))
{
return 0;
}
@@ -5101,6 +5102,7 @@
#ifdef NEW_BEVEL
RNA_def_float(ot->srna, "offset", 0.0f, -FLT_MAX, FLT_MAX, "Offset", "", 0.0f, 1.0f);
RNA_def_int(ot->srna, "segments", 1, 1, 50, "Segments", "Segments for curved edge", 1, 8);
+ RNA_def_boolean(ot->srna, "vertex_only", FALSE, "Vertex only", "Bevel only vertices");
#else
/* take note, used as a factor _and_ a distance depending on 'use_dist' */
RNA_def_float(ot->srna, "percent", 0.0f, -FLT_MAX, FLT_MAX, "Percentage", "", 0.0f, 1.0f);
Modified: trunk/blender/source/blender/modifiers/intern/MOD_bevel.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_bevel.c 2012-12-28 01:36:00 UTC (rev 53351)
+++ trunk/blender/source/blender/modifiers/intern/MOD_bevel.c 2012-12-28 02:45:10 UTC (rev 53352)
@@ -140,7 +140,7 @@
}
}
- BM_mesh_bevel(bm, bmd->value, segments);
+ BM_mesh_bevel(bm, bmd->value, segments, bmd->flags & BME_BEVEL_VERT);
result = CDDM_from_bmesh(bm, TRUE);
More information about the Bf-blender-cvs
mailing list