Salome HOME
patch for install error on Linux
[modules/hydro.git] / src / HYDROData / HYDROData_Bathymetry.cxx
index f7d31037c98ff71954ad8b203b6e975a10ba5736..f0a871a30983d5e36769ddea4ba8a80eaac19ac9 100644 (file)
@@ -71,6 +71,24 @@ std::map<int, HYDROData_QuadtreeNode*> HYDROData_Bathymetry::myQuadtrees;
 std::map<int, vtkPolyData*> HYDROData_Bathymetry::myDelaunay2D;
 #endif
 
+inline double sqr( double x )
+{
+  return x*x;
+}
+
+HYDROData_Bathymetry::AltitudePoint::AltitudePoint( double x, double y, double z )
+{
+  X=x; Y=y; Z=z;
+}
+
+double HYDROData_Bathymetry::AltitudePoint::SquareDistance( const HYDROData_Bathymetry::AltitudePoint& p ) const
+{
+  double d = 0;
+  d += sqr( X - p.X );
+  d += sqr( Y - p.Y );
+  d += sqr( Z - p.Z );
+  return d;
+}
 
 HYDROData_Bathymetry::HYDROData_Bathymetry()
 : HYDROData_IAltitudeObject()
@@ -169,7 +187,7 @@ HYDROData_QuadtreeNode* HYDROData_Bathymetry::GetQuadtreeNodes() const
   // if (myQuadtree->isEmpty() )
   if (myQuadtrees.find(labkey) == myQuadtrees.end())
     {
-      DEBTRACE("GetQuadtreeNodes init " << this << " " << labkey);
+      //DEBTRACE("GetQuadtreeNodes init " << this << " " << labkey);
       HYDROData_QuadtreeNode* aQuadtree = new HYDROData_QuadtreeNode(0, 30, 5, 0.);
       myQuadtrees[labkey] = aQuadtree;
       TDF_Label aLabel = myLab.FindChild(DataTag_AltitudePoints, false);
@@ -195,7 +213,7 @@ HYDROData_QuadtreeNode* HYDROData_Bathymetry::GetQuadtreeNodes() const
           index++;
           aListOfNodes->push_back(aPoint);
         }
-      DEBTRACE("  GetQuadtreeNodes call setNodesAndCompute");
+      //DEBTRACE("  GetQuadtreeNodes call setNodesAndCompute");
       aQuadtree->setNodesAndCompute(aListOfNodes);
       return aQuadtree;
     }
@@ -214,7 +232,7 @@ vtkPolyData* HYDROData_Bathymetry::GetVtkDelaunay2D() const
   //DEBTRACE("GetVtkDelaunay2D this labkey altkey "<<this<<" "<<labkey<<" "<<altkey);
   if (myDelaunay2D.find(labkey) == myDelaunay2D.end())
     {
-      DEBTRACE("GetVtkDelaunay2D init " << this << " " << labkey);
+      //DEBTRACE("GetVtkDelaunay2D init " << this << " " << labkey);
 
       TDF_Label aLabel = myLab.FindChild(DataTag_AltitudePoints, false);
       if (aLabel.IsNull())
@@ -237,7 +255,7 @@ vtkPolyData* HYDROData_Bathymetry::GetVtkDelaunay2D() const
         }
       vtkPolyData* profile = vtkPolyData::New();
       profile->SetPoints(points);
-      DEBTRACE("Number of Points: "<< points->GetNumberOfPoints());
+      //DEBTRACE("Number of Points: "<< points->GetNumberOfPoints());
 
       vtkDelaunay2D* delaunay2D = vtkDelaunay2D::New();
       delaunay2D->SetInputData(profile);
@@ -321,7 +339,7 @@ bool interpolZtriangle(const gp_XY& point, vtkPolyData* delaunay2D, vtkIdList* t
   int nbPts = triangle->GetNumberOfIds();
   if (nbPts != 3)
     {
-      DEBTRACE("not a triangle ?");
+      //DEBTRACE("not a triangle ?");
       return false;
     }
   vtkIdType s[3];
@@ -341,7 +359,7 @@ bool interpolZtriangle(const gp_XY& point, vtkPolyData* delaunay2D, vtkIdList* t
   double det = (v[1][1]-v[2][1])*(v[0][0]-v[2][0]) + (v[2][0]-v[1][0])*(v[0][1]-v[2][1]);
   if (det == 0)
     {
-      DEBTRACE("flat triangle ?");
+      //DEBTRACE("flat triangle ?");
       return false;
     }
 
@@ -367,7 +385,7 @@ bool interpolZtriangle(const gp_XY& point, vtkPolyData* delaunay2D, vtkIdList* t
 
 double HYDROData_Bathymetry::GetAltitudeForPoint(const gp_XY& thePoint, int theMethod) const
 {
-  DEBTRACE("GetAltitudeForPoint p(" << thePoint.X() << ", " << thePoint.Y() << "), interpolation method: " << theMethod);
+  //DEBTRACE("GetAltitudeForPoint p(" << thePoint.X() << ", " << thePoint.Y() << "), interpolation method: " << theMethod);
   double anInvalidAltitude = GetInvalidAltitude();
   double aResAltitude = anInvalidAltitude;
 
@@ -376,7 +394,7 @@ double HYDROData_Bathymetry::GetAltitudeForPoint(const gp_XY& thePoint, int theM
   HYDROData_QuadtreeNode* aQuadtree = GetQuadtreeNodes();
   if (!aQuadtree)
     {
-      DEBTRACE("  no Quadtree");
+      //DEBTRACE("  no Quadtree");
       return aResAltitude;
     }
 
@@ -385,13 +403,13 @@ double HYDROData_Bathymetry::GetAltitudeForPoint(const gp_XY& thePoint, int theM
   while (dist2nodes.size() == 0)
     {
       aQuadtree->setPrecision(aQuadtree->getPrecision() *2);
-      DEBTRACE("adjust precision to: " << aQuadtree->getPrecision());
+      //DEBTRACE("adjust precision to: " << aQuadtree->getPrecision());
       aQuadtree->NodesAround(thePoint, dist2nodes, aQuadtree->getPrecision());
     }
   std::map<double, const gpi_XYZ*>::const_iterator it = dist2nodes.begin();
   aResAltitude = it->second->Z();
   int nodeIndex = it->second->getIndex();
-  DEBTRACE("  number of points found: " << dist2nodes.size() << " nearest z: " << aResAltitude << " point index: " << nodeIndex);
+  //DEBTRACE("  number of points found: " << dist2nodes.size() << " nearest z: " << aResAltitude << " point index: " << nodeIndex);
 
   // --- for coarse bathymetry clouds (when the TELEMAC mesh is more refined than the bathymetry cloud)
   //     interpolation is required.
@@ -413,7 +431,7 @@ double HYDROData_Bathymetry::GetAltitudeForPoint(const gp_XY& thePoint, int theM
       points->Allocate(64);
       aDelaunay2D->GetPointCells(nodeIndex, cells);
       vtkIdType nbCells = cells->GetNumberOfIds();
-      DEBTRACE("  triangles on nearest point: " << nbCells);
+      //DEBTRACE("  triangles on nearest point: " << nbCells);
       bool isInside = false;
       for (int i=0; i<nbCells; i++)
         {
@@ -423,11 +441,14 @@ double HYDROData_Bathymetry::GetAltitudeForPoint(const gp_XY& thePoint, int theM
           if (isInside)
             {
               aResAltitude = z;
-              DEBTRACE("  interpolated z: " << z);
+              //DEBTRACE("  interpolated z: " << z);
               break;
             }
         }
-      if (!isInside) DEBTRACE("  point outside triangles, nearest z kept");
+      if (!isInside)
+      {
+      //    DEBTRACE("  point outside triangles, nearest z kept");
+      }
     }
   #endif
   return aResAltitude;