[Bf-blender-cvs] [73a0368d19c] newboolean: Boolean: fixed case where example came from new edge.
Howard Trickey
noreply at git.blender.org
Sun Mar 8 20:34:06 CET 2020
Commit: 73a0368d19cabebe01992bce1a8368b8bd9631ef
Author: Howard Trickey
Date: Sun Mar 8 15:32:35 2020 -0400
Branches: newboolean
https://developer.blender.org/rB73a0368d19cabebe01992bce1a8368b8bd9631ef
Boolean: fixed case where example came from new edge.
The code keeps track of which edges are to be used for examples,
and missed a case where the split edge was a new one so shouldn't
have an example.
===================================================================
M source/blender/bmesh/tools/bmesh_boolean.c
===================================================================
diff --git a/source/blender/bmesh/tools/bmesh_boolean.c b/source/blender/bmesh/tools/bmesh_boolean.c
index 464ddcbf571..b1b3d30b5d2 100644
--- a/source/blender/bmesh/tools/bmesh_boolean.c
+++ b/source/blender/bmesh/tools/bmesh_boolean.c
@@ -1305,8 +1305,10 @@ static void apply_meshchange_to_bmesh(BoolState *bs,
if (newedge->example != -1) {
/* Not really supposed to access bm->etable directly but even
* though it may be technically dirty, all of the example indices
- * will still be OK. */
+ * will still be OK since they should be from original edges. */
+ BLI_assert(newedge->example < meshadd->eindex_start);
bme_eg = bm->etable[newedge->example];
+ BLI_assert(bme_eg != NULL && bme_eg->head.htype == BM_EDGE);
}
else {
bme_eg = NULL;
@@ -1370,6 +1372,7 @@ static void apply_meshchange_to_bmesh(BoolState *bs,
both_sides = false;
opp_normals = false;
if (newface->example != -1) {
+ BLI_assert(newface->example < meshadd->findex_start);
bmf_eg = bm->ftable[newface->example];
/* See if newface has examples on both sides of the boolean operation.
@@ -1745,6 +1748,7 @@ static int meshadd_add_edge(
newe->v1 = v1;
newe->v2 = v2;
newe->example = example;
+ BLI_assert(example == -1 || example < meshadd->eindex_start);
if ((uint)meshadd->totedge == meshadd->edge_reserved) {
uint new_reserved = 2 * meshadd->edge_reserved;
NewEdge **new_buf = BLI_memarena_alloc(arena, new_reserved * sizeof(NewEdge *));
@@ -2543,7 +2547,7 @@ static PartPartIntersect *self_intersect_part_and_ppis(BoolState *bs,
MeshDelete *meshdelete = &change->delete;
IntIntMap *vert_merge_map = &change->vert_merge_map;
#ifdef BOOLDEBUG
- int dbg_level = 2;
+ int dbg_level = 0;
#endif
#ifdef BOOLDEBUG
@@ -2889,6 +2893,9 @@ static PartPartIntersect *self_intersect_part_and_ppis(BoolState *bs,
int ev1, ev2;
imeshplus_get_edge_verts(&imp, e_eg, &ev1, &ev2);
if (!((v1 == ev1 && v2 == ev2) || (v1 == ev2 && v2 == ev1))) {
+ if (e_eg >= imesh_totedge(im)) {
+ e_eg = -1;
+ }
e = meshadd_add_edge(bs, meshadd, v1, v2, e_eg, true);
}
else {
@@ -3746,7 +3753,7 @@ bool BM_mesh_boolean(BMesh *bm,
MeshChange meshchange;
IntSet both_side_faces;
#ifdef BOOLDEBUG
- int dbg_level = 1;
+ int dbg_level = 0;
#endif
#ifdef PERFDEBUG
More information about the Bf-blender-cvs
mailing list