+HYDROData_QuadtreeNode* HYDROData_Bathymetry::GetQuadtreeNodes() const
+{
+ TDF_Label aLabel = myLab.FindChild(DataTag_AltitudePoints, false);
+ if (aLabel.IsNull())
+ return 0;
+ int labkey = myLab.Tag();
+ //int altkey = aLabel.Tag();
+ //DEBTRACE("GetQuadtreeNodes this labkey altkey "<<this<<" "<<labkey<<" "<<altkey);
+ // if (myQuadtree->isEmpty() )
+ if (myQuadtrees.find(labkey) == myQuadtrees.end())
+ {
+ //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);
+ if (aLabel.IsNull())
+ return 0;
+
+ Handle(TDataStd_RealArray) aCoordsArray;
+ if (!aLabel.FindAttribute(TDataStd_RealArray::GetID(), aCoordsArray))
+ return 0;
+
+ Nodes_3D* aListOfNodes = new Nodes_3D();
+
+ int index =0;
+ for (int i = aCoordsArray->Lower(), n = aCoordsArray->Upper(); i <= n;)
+ {
+ if (i + 3 > n + 1)
+ break;
+
+ double x = aCoordsArray->Value(i++);
+ double y = aCoordsArray->Value(i++);
+ double z = aCoordsArray->Value(i++);
+ gpi_XYZ* aPoint = new gpi_XYZ(x, y, z, index);
+ index++;
+ aListOfNodes->push_back(aPoint);
+ }
+ //DEBTRACE(" GetQuadtreeNodes call setNodesAndCompute");
+ aQuadtree->setNodesAndCompute(aListOfNodes);
+ return aQuadtree;
+ }
+ else
+ return myQuadtrees[labkey];
+}
+
+#ifndef LIGHT_MODE
+vtkPolyData* HYDROData_Bathymetry::GetVtkDelaunay2D() const
+{
+ TDF_Label aLabel = myLab.FindChild(DataTag_AltitudePoints, false);
+ if (aLabel.IsNull())
+ return 0;
+ int labkey = myLab.Tag();
+ //int altkey = aLabel.Tag();
+ //DEBTRACE("GetVtkDelaunay2D this labkey altkey "<<this<<" "<<labkey<<" "<<altkey);
+ if (myDelaunay2D.find(labkey) == myDelaunay2D.end())
+ {
+ //DEBTRACE("GetVtkDelaunay2D init " << this << " " << labkey);
+
+ TDF_Label aLabel = myLab.FindChild(DataTag_AltitudePoints, false);
+ if (aLabel.IsNull())
+ return 0;
+ Handle(TDataStd_RealArray) aCoordsArray;
+ if (!aLabel.FindAttribute(TDataStd_RealArray::GetID(), aCoordsArray))
+ return 0;
+
+ vtkPoints *points = vtkPoints::New();
+ points->Allocate(aCoordsArray->Upper() +1);
+ for (int i = aCoordsArray->Lower(), n = aCoordsArray->Upper(); i <= n;)
+ {
+ if (i + 3 > n + 1)
+ break;
+ double x = aCoordsArray->Value(i++);
+ double y = aCoordsArray->Value(i++);
+ double z = aCoordsArray->Value(i++);
+ vtkIdType index = points->InsertNextPoint(x, y, z); // same index than in GetQuadtreeNodes
+ //DEBTRACE(" " << index);
+ }
+ vtkPolyData* profile = vtkPolyData::New();
+ profile->SetPoints(points);
+ //DEBTRACE("Number of Points: "<< points->GetNumberOfPoints());
+
+ vtkDelaunay2D* delaunay2D = vtkDelaunay2D::New();
+ delaunay2D->SetInputData(profile);
+ delaunay2D->Update();
+ vtkPolyData* data = delaunay2D->GetOutput();
+ data->BuildLinks();
+ myDelaunay2D[labkey] = data;
+ return data;
+ }
+ else
+ return myDelaunay2D[labkey];
+
+}
+#endif