Salome HOME
0020063: NETGEN regression
authoreap <eap@opencascade.com>
Tue, 25 Nov 2008 17:06:14 +0000 (17:06 +0000)
committereap <eap@opencascade.com>
Tue, 25 Nov 2008 17:06:14 +0000 (17:06 +0000)
   roll back fix of OCCSurface::GetNormalVector() in occmeshsurf.cpp

src/NETGEN/netgen45ForSalome.patch

index a7cf4c12abfc75153430759b6d4803da7b89bb6d..fac1fc0463f493e0c2c709d46256f5fbd153b267 100644 (file)
@@ -875,140 +875,6 @@ diff -Naur netgen-4.5.old/libsrc/occ/occmeshsurf.cpp netgen-4.5.new/libsrc/occ/o
  
  
  namespace netgen
-@@ -40,6 +42,7 @@
-     */
-+    n=0;
-     GeomLProp_SLProps lprop(occface,geominfo.u,geominfo.v,1,1e-5);
-     double setu=geominfo.u,setv=geominfo.v;
-@@ -49,57 +52,78 @@
-       double ustep = 0.01*(umax-umin);
-       double vstep = 0.01*(vmax-vmin);
--      n=0;
--
--      while(setu < umax && (lprop.D1U().Magnitude() < 1e-5 || lprop.D1V().Magnitude() < 1e-5))
--        setu += ustep;
--      if(setu < umax)
--        {
--          lprop.SetParameters(setu,setv);
--          n(0)+=lprop.Normal().X();
--          n(1)+=lprop.Normal().Y();
--          n(2)+=lprop.Normal().Z();
--        }
--      setu = geominfo.u;
--      while(setu > umin && (lprop.D1U().Magnitude() < 1e-5 || lprop.D1V().Magnitude() < 1e-5))
--        setu -= ustep;
--      if(setu > umin)
--        {
--          lprop.SetParameters(setu,setv);
--          n(0)+=lprop.Normal().X();
--          n(1)+=lprop.Normal().Y();
--          n(2)+=lprop.Normal().Z();
--        }
--      setu = geominfo.u;
--
--      while(setv < vmax && (lprop.D1U().Magnitude() < 1e-5 || lprop.D1V().Magnitude() < 1e-5))
--        setv += ustep;
--      if(setv < vmax)
--        {
--          lprop.SetParameters(setu,setv);
--          n(0)+=lprop.Normal().X();
--          n(1)+=lprop.Normal().Y();
--          n(2)+=lprop.Normal().Z();
--        }
--      setv = geominfo.v;
--      while(setv > vmin && (lprop.D1U().Magnitude() < 1e-5 || lprop.D1V().Magnitude() < 1e-5))
--        setv -= ustep;
--      if(setv > vmin)
--        {
--          lprop.SetParameters(setu,setv);
--          n(0)+=lprop.Normal().X();
--          n(1)+=lprop.Normal().Y();
--          n(2)+=lprop.Normal().Z();
--        }
--      setv = geominfo.v;
--
-+        if ( lprop.D1V().Magnitude() < 1e-5 )
-+        {
-+          while(setu < umax && (lprop.D1V().Magnitude() < 1e-5 || !lprop.IsNormalDefined())) {
-+            setu += ustep;
-+            if(setu < umax)
-+              lprop.SetParameters(setu,setv);
-+          }
-+          if (lprop.D1V().Magnitude() < 1e-5 || !lprop.IsNormalDefined()) {
-+            setu = geominfo.u;
-+            while(setu > umin && (lprop.D1V().Magnitude() < 1e-5 || !lprop.IsNormalDefined())) {
-+              setu -= ustep;
-+              if(setu > umin)
-+                lprop.SetParameters(setu,setv);
-+            }
-+          }
-+          ustep = 0;
-+          vstep = 0.1*(vmax-vmin);
-+          setv = vmin;
-+        }
-+        else
-+        {
-+          while(setv < vmax && (lprop.D1U().Magnitude() < 1e-5 || !lprop.IsNormalDefined())) {
-+            setv += vstep;
-+            if(setv < vmax)
-+              lprop.SetParameters(setu,setv);
-+          }
-+          if (lprop.D1U().Magnitude() < 1e-5 || !lprop.IsNormalDefined()) {
-+            setv = geominfo.v;
-+            while(setv > vmin && (lprop.D1U().Magnitude() < 1e-5 || !lprop.IsNormalDefined())) {
-+              setv -= vstep;
-+              if(setv > vmin)
-+                lprop.SetParameters(setu,setv);
-+            }
-+          }
-+          vstep = 0;
-+          ustep = 0.1*(umax-umin);
-+          setu = umin;
-+        }
-+
-+        if ( !lprop.IsNormalDefined() )
-+          return;
-+        gp_Vec N1 = lprop.Normal();
-+
-+        const double angleTol = PI / 180.;
-+      while(setu < umax && setv < vmax) {
-+          lprop.SetParameters(setu,setv);
-+          if ( lprop.IsNormalDefined() ) {
-+            gp_Vec Ni = lprop.Normal();
-+            double angle = N1.Angle(Ni);
-+            if ( angle > angleTol ) {
-+              //cout << "Too large angle: " << angle * 180. / PI << endl;
-+              return;
-+            }
-+            n(0)+=Ni.X();
-+            n(1)+=Ni.Y();
-+            n(2)+=Ni.Z();
-+            setu += ustep;
-+            setv += vstep;
-+          }
-+        }
-       n.Normalize();
-+//    (*testout) << "u " << geominfo.u << " v " << geominfo.v
-+//                    <<" p " << lprop.Value().X()<<" "<<lprop.Value().Y()<<" "<<lprop.Value().Z()<<" "
-+//                    <<" n " << n(0)<< " "<<n(1)<< " "<<n(2)<< " "<<endl;
-       }
-     else
-       {
--      n(0)=lprop.Normal().X();
--      n(1)=lprop.Normal().Y();
--      n(2)=lprop.Normal().Z();
-+        if ( lprop.IsNormalDefined() ) {
-+          n(0)=lprop.Normal().X();
-+          n(1)=lprop.Normal().Y();
-+          n(2)=lprop.Normal().Z();
-+        }
-       }
-     if(glob_testout)
 @@ -411,11 +413,16 @@
    }