[Bf-blender-cvs] [ed08597] master: Correct mistake in recently added intersect tool
Campbell Barton
noreply at git.blender.org
Wed Aug 20 04:50:04 CEST 2014
Commit: ed0859744266256ef591318ee4e14fe124804db0
Author: Campbell Barton
Date: Wed Aug 20 12:36:35 2014 +1000
Branches: master
https://developer.blender.org/rBed0859744266256ef591318ee4e14fe124804db0
Correct mistake in recently added intersect tool
Sorting verts along an edge wasn't working reliably.
===================================================================
M source/blender/bmesh/tools/bmesh_intersect.c
===================================================================
diff --git a/source/blender/bmesh/tools/bmesh_intersect.c b/source/blender/bmesh/tools/bmesh_intersect.c
index 8e80daa..199cbb9 100644
--- a/source/blender/bmesh/tools/bmesh_intersect.c
+++ b/source/blender/bmesh/tools/bmesh_intersect.c
@@ -177,10 +177,9 @@ struct vert_sort_t {
};
#ifdef USE_SPLICE
-static void edge_verts_sort(BMEdge *e, struct LinkBase *v_ls_base)
+static void edge_verts_sort(const float co[3], struct LinkBase *v_ls_base)
{
/* not optimal but list will be typically < 5 */
- const float *co = e->v1->co;
unsigned int i;
struct vert_sort_t *vert_sort = BLI_array_alloca(vert_sort, v_ls_base->list_len);
LinkNode *node;
@@ -194,7 +193,7 @@ static void edge_verts_sort(BMEdge *e, struct LinkBase *v_ls_base)
vert_sort[i].v = v;
}
- qsort(vert_sort, v_ls_base->list_len, sizeof(*vert_sort), BLI_sortutil_cmp_float_reverse);
+ qsort(vert_sort, v_ls_base->list_len, sizeof(*vert_sort), BLI_sortutil_cmp_float);
for (i = 0, node = v_ls_base->list; i < v_ls_base->list_len; i++, node = node->next) {
node->link = vert_sort[i].v;
@@ -963,20 +962,23 @@ bool BM_mesh_intersect(
struct LinkBase *v_ls_base = BLI_ghashIterator_getValue(&gh_iter);
BMVert *v_start;
+ BMVert *v_end;
BMVert *v_prev;
bool is_wire;
LinkNode *node;
+ /* direction is arbitrary, could be swapped */
+ v_start = e->v1;
+ v_end = e->v2;
+
if (v_ls_base->list_len > 1) {
- edge_verts_sort(e, v_ls_base);
+ edge_verts_sort(v_start->co, v_ls_base);
}
#ifdef USE_DUMP
printf("# SPLITTING EDGE: %d, %d\n", e_index, v_ls_base->list_len);
#endif
- v_start = e->v1;
-
/* intersect */
is_wire = BLI_gset_haskey(s.wire_edges, e);
@@ -995,7 +997,9 @@ bool BM_mesh_intersect(
const float fac = line_point_factor_v3(vi->co, e->v1->co, e->v2->co);
if (BM_vert_in_edge(e, v_prev)) {
- v_prev = BM_edge_split(bm, e, v_prev, &e, CLAMPIS(fac, 0.0f, 1.0f));
+ v_prev = BM_edge_split(bm, e, v_prev, NULL, CLAMPIS(fac, 0.0f, 1.0f));
+ BLI_assert( BM_vert_in_edge(e, v_end));
+
if (!BM_edge_exists(v_prev, vi) &&
!BM_vert_splice_check_double(v_prev, vi) &&
!BM_vert_pair_share_face_check(v_prev, vi))
@@ -1259,6 +1263,8 @@ bool BM_mesh_intersect(
face_edges_split(bm, f, e_ls_base);
}
}
+#else
+ (void)totface_orig;
#endif /* USE_NET */
More information about the Bf-blender-cvs
mailing list