diff options
author | Erwin Coumans <blender@erwincoumans.com> | 2006-06-02 22:17:40 +0400 |
---|---|---|
committer | Erwin Coumans <blender@erwincoumans.com> | 2006-06-02 22:17:40 +0400 |
commit | abd8fba47ff297574e9418bb1d951cc483751fba (patch) | |
tree | 4ee61489016983ea3b2c0a695b372474fc2ba0f6 /intern/decimation | |
parent | d40c1fc2030142b07990f01bbcf2c0dfa770075f (diff) |
applied patch [ #4207 ] Boolean operations fix
Also fixed other problems with STL iterators/vectors, that only show up under Visual Studio 2005.
See also http://projects.blender.org/pipermail/bf-committers/2006-May/014608.html
Diffstat (limited to 'intern/decimation')
-rw-r--r-- | intern/decimation/intern/LOD_EdgeCollapser.cpp | 9 | ||||
-rw-r--r-- | intern/decimation/intern/LOD_MeshPrimitives.cpp | 6 |
2 files changed, 7 insertions, 8 deletions
diff --git a/intern/decimation/intern/LOD_EdgeCollapser.cpp b/intern/decimation/intern/LOD_EdgeCollapser.cpp index 07bcbf2b9d2..86b2fbaf423 100644 --- a/intern/decimation/intern/LOD_EdgeCollapser.cpp +++ b/intern/decimation/intern/LOD_EdgeCollapser.cpp @@ -273,12 +273,13 @@ CollapseEdge( vector<LOD_EdgeInd>::iterator edge_it = degenerate_edges.begin(); vector<LOD_EdgeInd>::const_iterator edge_end = degenerate_edges.end(); - for (; edge_it != edge_end; ++edge_it) { + for (; !(edge_it == edge_end); ++edge_it) { - LOD_Edge & edge = edges[*edge_it]; + LOD_EdgeInd ed = (*edge_it); + LOD_Edge & edge = edges[ed];//*edge_it]; - verts[edge.m_verts[0]].RemoveEdge(*edge_it); - verts[edge.m_verts[1]].RemoveEdge(*edge_it); + verts[edge.m_verts[0]].RemoveEdge(ed); + verts[edge.m_verts[1]].RemoveEdge(ed); } // we postpone deletion of the internal edges untill the end diff --git a/intern/decimation/intern/LOD_MeshPrimitives.cpp b/intern/decimation/intern/LOD_MeshPrimitives.cpp index 16b80cdeea8..a8328a9adbe 100644 --- a/intern/decimation/intern/LOD_MeshPrimitives.cpp +++ b/intern/decimation/intern/LOD_MeshPrimitives.cpp @@ -62,11 +62,9 @@ RemoveEdge( if (result == m_edges.end()) { return false; } - LOD_EdgeInd last = m_edges.back(); - m_edges.pop_back(); - if (m_edges.empty()) return true; - *result = last; + std::swap(*result, m_edges.back()); + m_edges.pop_back(); return true; }; |