0032601: Foundation Classes - Poly_Connect hangs on the given incorrect triangulation
[occt.git] / src / Poly / Poly_Connect.cxx
index 8c6c6bd..15e0b2b 100644 (file)
@@ -223,6 +223,8 @@ void Poly_Connect::Initialize(const Standard_Integer N)
   mytr = myfirst;
   mysense = Standard_True;
   mymore = (myfirst != 0);
+  myPassedTr.Clear();
+  myPassedTr.Add (mytr);
   if (mymore)
   {
     Standard_Integer i, no[3];
@@ -247,15 +249,16 @@ void Poly_Connect::Next()
   if (mysense) {
     for (i = 0; i < 3; i++) {
       if (t[i] != 0) {
-       myTriangulation->Triangle (t[i]).Get (n[0], n[1], n[2]);
-       for (j = 0; j < 3; j++) {
-         if ((n[j] == mynode) && (n[(j+1)%3] == myothernode)) {
-           mytr = t[i];
-           myothernode = n[(j+2)%3];
-           mymore = (mytr != myfirst);
-           return;
-         }
-       }
+        myTriangulation->Triangle (t[i]).Get (n[0], n[1], n[2]);
+        for (j = 0; j < 3; j++) {
+          if ((n[j] == mynode) && (n[(j+1)%3] == myothernode)) {
+            mytr = t[i];
+            myothernode = n[(j+2)%3];
+            mymore = !myPassedTr.Contains (mytr);
+            myPassedTr.Add (mytr);
+            return;
+          }
+        }
       }
     }
     // sinon, depart vers la gauche.
@@ -270,15 +273,16 @@ void Poly_Connect::Next()
   if (!mysense) {
     for (i = 0; i < 3; i++) {
       if (t[i] != 0) {
-       myTriangulation->Triangle (t[i]).Get (n[0], n[1], n[2]);
-       for (j = 0; j < 3; j++) {
-         if ((n[j] == mynode) && (n[(j+2)%3] == myothernode)) {
-           mytr = t[i];
-           myothernode = n[(j+1)%3];
-           mymore = Standard_True;
-           return;
-         }
-       }
+        myTriangulation->Triangle (t[i]).Get (n[0], n[1], n[2]);
+        for (j = 0; j < 3; j++) {
+          if ((n[j] == mynode) && (n[(j+2)%3] == myothernode)) {
+            mytr = t[i];
+            myothernode = n[(j+1)%3];
+            mymore = !myPassedTr.Contains (mytr);
+            myPassedTr.Add (mytr);
+            return;
+          }
+        }
       }
     }
   }