From 123ddb2e1276f4bde38baa82e692af9d634a59b3 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Sun, 12 Aug 2001 20:45:58 +0000
Subject: [PATCH] added some warnings and thresholding in XYtoUV

---
 Mesh/Utils.cpp | 40 ++++++++++++++++++++++++++--------------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git a/Mesh/Utils.cpp b/Mesh/Utils.cpp
index f7afd790f4..7c0deec3f3 100644
--- a/Mesh/Utils.cpp
+++ b/Mesh/Utils.cpp
@@ -1,4 +1,4 @@
-// $Id: Utils.cpp,v 1.1 2001-08-11 23:28:32 geuzaine Exp $
+// $Id: Utils.cpp,v 1.2 2001-08-12 20:45:58 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Numeric.h"
@@ -341,9 +341,10 @@ void XYZtoUV (Surface *s, double X, double Y, double Z, double *U, double *V) {
     *V = Vnew;
   }
 
-  if(iter == MaxIter) Msg(WARNING, "Could not converge in XYZtoUV");
-
-  if(iter > 10) Msg(WARNING, "Many (%d) iterations in XYZtoUV", iter);
+  if(iter > 10){
+    if(iter == MaxIter) Msg(WARNING, "Could not converge in XYZtoUV");
+    else Msg(WARNING, "Many (%d) iterations in XYZtoUV", iter);
+  }
 
   free_dmatrix(mat,1,3,1,3);
   free_dmatrix(jac,1,3,1,3);
@@ -356,8 +357,6 @@ void XYtoUV (Surface * s, double *X, double *Y,
   double det, Unew, Vnew, err, mat[2][2], jac[2][2];
   int iter;
   Vertex D_u, D_v, P;
-
-  /*
   double umin, umax, vmin, vmax;
 
   if (s->Typ == MSH_SURF_NURBS){
@@ -370,7 +369,6 @@ void XYtoUV (Surface * s, double *X, double *Y,
     umin = vmin = 0.0;
     umax = vmax = 1.0;
   }
-  */
 
   *U = *V = 0.487;
   err = 1.0;
@@ -404,16 +402,30 @@ void XYtoUV (Surface * s, double *X, double *Y,
     iter++;
     *U = Unew;
     *V = Vnew;
-    if (iter == MaxIter)
-      break;
-    
   }
   
   *Z = P.Pos.Z;
 
-  /*
-  if (iter == MaxIter || (fabs (Unew) >= umax || fabs (Vnew) >= vmax) ||
-      Vnew < vmin || Unew < umin){
+  if(iter > 10){
+    if(iter == MaxIter) Msg(WARNING, "Could not converge in XYtoUV");
+    else Msg(WARNING, "Many (%d) iterations in XYtoUV...", iter);
+  }
+
+  if (Unew > umax || Vnew > vmax || Unew < umin || Vnew < vmin){
+    Msg(WARNING, "(U,V) thresholded in XYtoUV (surface mesh may be wrong)");
+    if(Unew > umax) *U = umax;
+    if(Vnew > vmax) *V = vmax;
+    if(Unew < umin) *U = umin;
+    if(Vnew < vmin) *V = vmin;
+  }
+
+#if 0
+  if (iter == MaxIter || Unew > umax || Vnew > vmax || Unew < umin || Vnew < vmin){
+    static int first_try=1;
+    if(first_try){
+      Msg(WARNING, "Entering rescue mode in XYtoUV...");
+      first_try=0;
+    }
     find_bestuv (s, *X, *Y, U, V, Z, 30);
     P = InterpolateSurface (s, *U, *V, 0, 0);
     
@@ -421,7 +433,7 @@ void XYtoUV (Surface * s, double *X, double *Y,
     *Y = P.Pos.Y;
     *Z = P.Pos.Z;
   }
-  */
+#endif
 }
 
 int Oriente (List_T * cu, double n[3]){
-- 
GitLab