===Tools===
Previous patch for "problems with STL iterators/vectors that only show up under Visual Studio 2005" could cause a crash when object used as a boolean modifier was changed (for example, flipping all the normals). The problem is that result of boolean operations (apparently) can result in empty meshes. Patched to use the vector::size operator to check for empty vectors before trying to check the iterator.
This commit is contained in:
parent
4c802a0a78
commit
5c95302043
@ -70,7 +70,9 @@ BSP_CSGMesh_VertexIt_Done(
|
||||
BSP_CSGMesh_VertexIt * vertex_it = (BSP_CSGMesh_VertexIt *)it;
|
||||
|
||||
/* dereferencing iterator::end() is illegal, so we dereference 1 before it */
|
||||
if (vertex_it->pos <= &(*(vertex_it->mesh->VertexSet().end() -1) )) return 0;
|
||||
/* also check that vector is not empty */
|
||||
if (vertex_it->mesh->VertexSet().size() &&
|
||||
vertex_it->pos <= &(*(vertex_it->mesh->VertexSet().end() -1) )) return 0;
|
||||
return 1;
|
||||
};
|
||||
|
||||
@ -163,8 +165,11 @@ BSP_CSGMesh_FaceIt_Done(
|
||||
BSP_CSGMesh_FaceIt * face_it = (BSP_CSGMesh_FaceIt *)it;
|
||||
|
||||
/* dereferencing iterator::end() is illegal, so we dereference 1 before it */
|
||||
if (face_it->pos <= &(*(face_it->mesh->FaceSet().end() -1))) {
|
||||
/* also check that vector is not empty */
|
||||
if (face_it->mesh->FaceSet().size() &&
|
||||
face_it->pos <= &(*(face_it->mesh->FaceSet().end() -1))) {
|
||||
if (face_it->face_triangle + 3 <= face_it->pos->m_verts.size()) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -256,7 +261,9 @@ BSP_CSGMesh_FaceIt_Step(
|
||||
BSP_CSGMesh_FaceIt * face_it = (BSP_CSGMesh_FaceIt *)it;
|
||||
|
||||
/* dereferencing iterator::end() is illegal, so we dereference 1 before it */
|
||||
if (face_it->pos <= &(*(face_it->mesh->FaceSet().end() -1))) {
|
||||
/* also check that vector is not empty */
|
||||
if (face_it->mesh->FaceSet().size() &&
|
||||
face_it->pos <= &(*(face_it->mesh->FaceSet().end() -1))) {
|
||||
|
||||
//if (face_it->face_triangle + 3 < face_it->pos->m_verts.size()) {
|
||||
// (face_it->face_triangle)++;
|
||||
|
Loading…
Reference in New Issue
Block a user