Salome HOME
Refs #289 - Spline profile is represented in OCC view as polyline profile
[modules/hydro.git] / src / HYDROData / HYDROData_Bathymetry.cxx
index 60e2d9bf300fd069819fa1c8188df4803b4f14ac..8d679bd2173caa35788541263c04e8a1b7d88461 100644 (file)
@@ -2,6 +2,7 @@
 #include "HYDROData_Bathymetry.h"
 #include "HYDROData_Document.h"
 #include "HYDROData_Tool.h"
+#include "HYDROData_PolylineXY.h"
 
 #include <gp_XY.hxx>
 #include <gp_XYZ.hxx>
@@ -479,5 +480,43 @@ bool HYDROData_Bathymetry::importFromXYZFile( QFile&          theFile,
 }
 
 
+bool HYDROData_Bathymetry::CreateBoundaryPolyline() const
+{
+  Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
+  Handle_HYDROData_PolylineXY aResult = 
+    Handle_HYDROData_PolylineXY::DownCast( aDocument->CreateObject( KIND_POLYLINEXY ) );
+
+  if( aResult.IsNull() )
+    return false;
+
+  //search free name
+  QString aPolylinePref = GetName() + "_Boundary";
+  QString aPolylineName = HYDROData_Tool::GenerateObjectName( aDocument, aPolylinePref );
+  aResult->SetName( aPolylineName );
 
+  double Xmin = 0.0, Xmax = 0.0, Ymin = 0.0, Ymax = 0.0;
+  bool isFirst = true;
+  AltitudePoints aPoints = GetAltitudePoints();
+  foreach( AltitudePoint aPnt, aPoints )
+  {
+    double x = aPnt.X(), y = aPnt.Y();
+    if( isFirst || x<Xmin )
+      Xmin = x;
+    if( isFirst || x>Xmax )
+      Xmax = x;
+    if( isFirst || y<Ymin )
+      Ymin = y;
+    if( isFirst || y>Ymax )
+      Ymax = y;
+    isFirst = false;
+  }
+
+  aResult->AddSection( "bound", HYDROData_IPolyline::SECTION_POLYLINE, true );
+  aResult->AddPoint( 0, HYDROData_IPolyline::Point( Xmin, Ymin ) );
+  aResult->AddPoint( 0, HYDROData_IPolyline::Point( Xmin, Ymax ) );
+  aResult->AddPoint( 0, HYDROData_IPolyline::Point( Xmax, Ymax ) );
+  aResult->AddPoint( 0, HYDROData_IPolyline::Point( Xmax, Ymin ) );
+  aResult->Update();
 
+  return true;
+}