Просмотр исходного кода

- Ifc: avoid duplicate points in opening contour lines, this sometimes screws up the clipping algorithm.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1325 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
aramis_acg 13 лет назад
Родитель
Сommit
612f67da0a
1 измененных файлов с 11 добавлено и 1 удалено
  1. 11 1
      code/IFCGeometry.cpp

+ 11 - 1
code/IFCGeometry.cpp

@@ -1461,7 +1461,17 @@ bool TryAddOpenings_Quadrulate(std::vector<TempOpening>& openings,
 				vpmin = std::min(vpmin,vv);
 				vpmax = std::max(vpmax,vv);
 
-				contour.push_back(vv);
+				// usually there won't be too many elements so the linear time check is ok
+				bool found = false;
+				for (std::vector<IfcVector2>::const_iterator it = contour.begin(); it != contour.end(); ++it) {
+					if (((*it)-vv).SquareLength() < 1e-5f) {
+						found = true;
+						break;
+					}
+				}
+				if(!found) {
+					contour.push_back(vv);
+				}
 			}
 		}