[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45985] trunk/blender/source/blender: fix for bevel modifier creating invalid geometry - simply tell BM_face_split () to check for doubles.
Campbell Barton
ideasman42 at gmail.com
Thu Apr 26 17:38:16 CEST 2012
Revision: 45985
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45985
Author: campbellbarton
Date: 2012-04-26 15:38:16 +0000 (Thu, 26 Apr 2012)
Log Message:
-----------
fix for bevel modifier creating invalid geometry - simply tell BM_face_split() to check for doubles.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/mesh.c
trunk/blender/source/blender/bmesh/tools/BME_bevel.c
Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c 2012-04-26 15:20:26 UTC (rev 45984)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c 2012-04-26 15:38:16 UTC (rev 45985)
@@ -1128,7 +1128,7 @@
MEdge *e;
MLoop *l;
int a, b;
- unsigned int *new_idx = MEM_mallocN(sizeof(int) * me->totedge, "strip_loose_edges old2new idx mapping for loops.");
+ unsigned int *new_idx = MEM_mallocN(sizeof(int) * me->totedge, __func__);
for (a = b = 0, e = me->medge; a < me->totedge; a++, e++) {
if (e->v1 != e->v2) {
Modified: trunk/blender/source/blender/bmesh/tools/BME_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/tools/BME_bevel.c 2012-04-26 15:20:26 UTC (rev 45984)
+++ trunk/blender/source/blender/bmesh/tools/BME_bevel.c 2012-04-26 15:38:16 UTC (rev 45985)
@@ -305,7 +305,7 @@
e1 = e2;
}
ov = BM_edge_other_vert(e1, v);
- sv = BM_edge_split(bm, e1, v, &ne, 0);
+ sv = BM_edge_split(bm, e1, v, &ne, 0.0f);
//BME_data_interp_from_verts(bm, v, ov, sv, 0.25); /* this is technically wrong.. */
//BME_data_interp_from_faceverts(bm, v, ov, sv, 0.25);
//BME_data_interp_from_faceverts(bm, ov, v, sv, 0.25);
@@ -347,7 +347,7 @@
else {
is_split_vert = 0;
ov = BM_edge_other_vert(l->e, v);
- sv = BM_edge_split(bm, l->e, v, &ne, 0);
+ sv = BM_edge_split(bm, l->e, v, &ne, 0.0f);
//BME_data_interp_from_verts(bm, v, ov, sv, 0.25); /* this is technically wrong.. */
//BME_data_interp_from_faceverts(bm, v, ov, sv, 0.25);
//BME_data_interp_from_faceverts(bm, ov, v, sv, 0.25);
@@ -371,8 +371,8 @@
if (vtd1->loc == NULL) {
/* this is a vert with data only for calculating initial weights */
- if (vtd1->weight < 0) {
- vtd1->weight = 0;
+ if (vtd1->weight < 0.0f) {
+ vtd1->weight = 0.0f;
}
scale = vtd1->weight / vtd1->factor;
if (!vtd1->max) {
@@ -537,14 +537,14 @@
se = l->next->e;
jf = NULL;
if (kl->v == kv) {
- BM_face_split(bm, kl->f, kl->prev->v, kl->next->v, &nl, kl->prev->e, FALSE);
+ BM_face_split(bm, kl->f, kl->prev->v, kl->next->v, &nl, kl->prev->e, TRUE);
ke = kl->e;
/* BMESH-TODO: jfke doesn't handle customdata */
jf = bmesh_jfke(bm, kl->prev->radial_next->f, kl->f, kl->prev->e);
BM_vert_collapse_edge(bm, ke, kv, FALSE);
}
else {
- BM_face_split(bm, kl->f, kl->next->next->v, kl->v, &nl, kl->next->e, FALSE);
+ BM_face_split(bm, kl->f, kl->next->next->v, kl->v, &nl, kl->next->e, TRUE);
ke = kl->e;
/* BMESH-TODO: jfke doesn't handle customdata */
jf = bmesh_jfke(bm, kl->next->radial_next->f, kl->f, kl->next->e);
@@ -583,14 +583,14 @@
se = l->e;
jf = NULL;
if (kl->v == kv) {
- BM_face_split(bm, kl->f, kl->prev->v, kl->next->v, &nl, kl->prev->e, FALSE);
+ BM_face_split(bm, kl->f, kl->prev->v, kl->next->v, &nl, kl->prev->e, TRUE);
ke = kl->e;
/* BMESH-TODO: jfke doesn't handle customdata */
jf = bmesh_jfke(bm, kl->prev->radial_next->f, kl->f, kl->prev->e);
BM_vert_collapse_edge(bm, ke, kv, FALSE);
}
else {
- BM_face_split(bm, kl->f, kl->next->next->v, kl->v, &nl, kl->next->e, FALSE);
+ BM_face_split(bm, kl->f, kl->next->next->v, kl->v, &nl, kl->next->e, TRUE);
ke = kl->e;
/* BMESH-TODO: jfke doesn't handle customdata */
jf = bmesh_jfke(bm, kl->next->radial_next->f, kl->f, kl->next->e);
@@ -605,7 +605,7 @@
}
if (!BMO_elem_flag_test(bm, v1, BME_BEVEL_NONMAN) || !BMO_elem_flag_test(bm, v2, BME_BEVEL_NONMAN)) {
- BM_face_split(bm, f, v2, v1, &l, e, FALSE);
+ BM_face_split(bm, f, v2, v1, &l, e, TRUE);
BMO_elem_flag_enable(bm, l->e, BME_BEVEL_BEVEL);
l = l->radial_next;
}
@@ -633,7 +633,7 @@
l = l->next->next;
/* "cut off" this corner */
- /* f = */ BM_face_split(bm, l->f, v2, v1, NULL, l->e, FALSE);
+ /* f = */ BM_face_split(bm, l->f, v2, v1, NULL, l->e, TRUE);
return l;
}
@@ -694,7 +694,7 @@
f = l->f;
/* max pass */
- if (value > 0.5f && max > 0) {
+ if (value > 0.5f && max > 0.0f) {
max = -1;
BM_ITER_ELEM (l, &iter, f, BM_LOOPS_OF_FACE) {
if (BMO_elem_flag_test(bm, l->e, BME_BEVEL_BEVEL) || BMO_elem_flag_test(bm, l->e, BME_BEVEL_ORIG)) {
@@ -835,7 +835,7 @@
vtd->weight = weight;
}
}
- else if (vtd->weight < 0) {
+ else if (vtd->weight < 0.0f) {
vtd->factor = factor;
vtd->weight = weight;
}
@@ -897,11 +897,11 @@
const float threshold = (options & BME_BEVEL_ANGLE) ? cosf(angle + 0.001) : 0.0f;
BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
- weight = 0.0;
+ weight = 0.0f;
if (!BMO_elem_flag_test(bm, e, BME_BEVEL_NONMAN)) {
if (options & BME_BEVEL_SELECT) {
if (BM_elem_flag_test(e, BM_ELEM_SELECT)) {
- weight = 1.0;
+ weight = 1.0f;
}
}
else if (options & BME_BEVEL_WEIGHT) {
@@ -925,10 +925,10 @@
}
}
else {
- weight = 1.0;
+ weight = 1.0f;
}
- if (weight > 0.0) {
+ if (weight > 0.0f) {
BMO_elem_flag_enable(bm, e, BME_BEVEL_BEVEL);
BME_bevel_add_vweight(td, bm, e->v1, weight, 1.0, options);
BME_bevel_add_vweight(td, bm, e->v2, weight, 1.0, options);
@@ -1071,9 +1071,9 @@
if (l->v != v) l = l->next;
if (l2->v != v) l2 = l2->next;
if (l->f->len > 3)
- BM_face_split(bm, l->f, l->next->v, l->prev->v, &l, l->e, FALSE); /* clip this corner off */
+ BM_face_split(bm, l->f, l->next->v, l->prev->v, &l, l->e, TRUE); /* clip this corner off */
if (l2->f->len > 3)
- BM_face_split(bm, l2->f, l2->next->v, l2->prev->v, &l, l2->e, FALSE); /* clip this corner off */
+ BM_face_split(bm, l2->f, l2->next->v, l2->prev->v, &l, l2->e, TRUE); /* clip this corner off */
curedge = bmesh_disk_edge_next(curedge, v);
} while (curedge != v->e);
BME_Bevel_Dissolve_Disk(bm, v);
More information about the Bf-blender-cvs
mailing list