Salome HOME
refs #1830: Progress dialog for the interpolation of bathymetry.
[modules/hydro.git] / src / HYDROData / HYDROData_Bathymetry.cxx
old mode 100644 (file)
new mode 100755 (executable)
index c0f841e..c274ff5
@@ -233,7 +233,6 @@ HYDROData_QuadtreeNode* HYDROData_Bathymetry::ComputeQuadtreeNodes( int key) con
   anAttr->SetID(TDataStd_Integer::GetID());
   DEBTRACE("GetQuadtreeNodes init " << this << " " << key);
   HYDROData_QuadtreeNode* aQuadtree = new HYDROData_QuadtreeNode(0, 30, 5, 0.);
-  myQuadtrees[key] = aQuadtree;
 
   Nodes_3D* aListOfNodes = new Nodes_3D();
 
@@ -252,6 +251,14 @@ HYDROData_QuadtreeNode* HYDROData_Bathymetry::ComputeQuadtreeNodes( int key) con
     }
   DEBTRACE("  GetQuadtreeNodes call setNodesAndCompute");
   aQuadtree->setNodesAndCompute(aListOfNodes);
+
+  Handle(Message_ProgressIndicator) aZIProgress = HYDROData_Tool::GetZIProgress();
+  if ( aZIProgress && aZIProgress->UserBreak() ) {
+    return 0;
+  }
+
+  myQuadtrees[key] = aQuadtree;
+
   return aQuadtree;
 }
 
@@ -309,6 +316,8 @@ vtkPolyData* HYDROData_Bathymetry::ComputeVtkDelaunay2D(int key) const
   if (!aLabel.FindAttribute(TDataStd_RealArray::GetID(), aCoordsArray))
     return 0;
 
+  HYDROData_Tool::SetTriangulationStatus(HYDROData_Tool::Running);
+
   Handle(TDataStd_Integer) anAttr = TDataStd_Integer::Set( myLab.FindChild( DataTag_Delaunay ), key );
   anAttr->SetID(TDataStd_Integer::GetID());
   DEBTRACE("GetVtkDelaunay2D init " << this << " " << key);
@@ -334,6 +343,9 @@ vtkPolyData* HYDROData_Bathymetry::ComputeVtkDelaunay2D(int key) const
   vtkPolyData* data = delaunay2D->GetOutput();
   data->BuildLinks();
   myDelaunay2D[key] = data;
+
+  HYDROData_Tool::SetTriangulationStatus(HYDROData_Tool::Finished);
+
   return data;
 }
 
@@ -460,9 +472,10 @@ double HYDROData_Bathymetry::GetAltitudeForPoint(const gp_XY& thePoint, int theM
   double aResAltitude = anInvalidAltitude;
 
   // --- find the nearest point in the bathymetry cloud, with quadtree
+  Handle(Message_ProgressIndicator) aZIProgress = HYDROData_Tool::GetZIProgress();
 
   HYDROData_QuadtreeNode* aQuadtree = GetQuadtreeNodes();
-  if (!aQuadtree)
+  if (!aQuadtree || (aZIProgress && aZIProgress->UserBreak()))
     {
       DEBTRACE("  no Quadtree");
       return aResAltitude;