Salome HOME
Merge branch 'BR_MULTI_BATHS' into HEAD
authorisn <isn@opencascade.com>
Tue, 13 Sep 2016 12:48:12 +0000 (15:48 +0300)
committerisn <isn@opencascade.com>
Tue, 13 Sep 2016 12:48:12 +0000 (15:48 +0300)
79 files changed:
src/HYDROData/HYDROData_Bathymetry.cxx
src/HYDROData/HYDROData_Bathymetry.h
src/HYDROData/HYDROData_CalculationCase.cxx
src/HYDROData/HYDROData_CalculationCase.h
src/HYDROData/HYDROData_LCM_FaceClassifier.cxx
src/HYDROData/HYDROData_LCM_FaceClassifier.h
src/HYDROData/HYDROData_LandCoverMap.cxx
src/HYDROData/HYDROData_LandCoverMap.h
src/HYDROData/HYDROData_SplitToZonesTool.cxx
src/HYDROData/HYDROData_SplitToZonesTool.h
src/HYDROGUI/HYDROGUI_CalculationOp.cxx
src/HYDROGUI/HYDROGUI_CalculationOp.h
src/HYDROGUI/HYDROGUI_ImportBathymetryDlg.cxx
src/HYDROGUI/HYDROGUI_ImportBathymetryDlg.h
src/HYDROGUI/HYDROGUI_ImportBathymetryOp.cxx
src/HYDROGUI/HYDROGUI_ImportBathymetryOp.h
src/HYDROGUI/resources/HYDROGUI_msg_en.ts
src/HYDROPy/HYDROData_Bathymetry.sip
src/HYDROPy/HYDROData_CalculationCase.sip
src/HYDRO_tests/CMakeLists.txt
src/HYDRO_tests/TestViewer.cxx
src/HYDRO_tests/reference_data/CLC06-cut_1_res.png
src/HYDRO_tests/reference_data/CMakeLists.txt
src/HYDRO_tests/reference_data/Channel.png
src/HYDRO_tests/reference_data/Extraction_Channel.png
src/HYDRO_tests/reference_data/Extraction_ImmZone.png
src/HYDRO_tests/reference_data/LCM_copied.png
src/HYDRO_tests/reference_data/LCM_split_2a.png
src/HYDRO_tests/reference_data/LCM_split_2b.png
src/HYDRO_tests/reference_data/LandCoverMap_Add_2_Objects.png
src/HYDRO_tests/reference_data/LandCoverMap_Merge_1.png
src/HYDRO_tests/reference_data/LandCoverMap_Merge_2.png
src/HYDRO_tests/reference_data/LandCoverMap_PrsByCoeff.png
src/HYDRO_tests/reference_data/LandCoverMap_PrsByTypes.png
src/HYDRO_tests/reference_data/LandCoverMap_Remove_1.png
src/HYDRO_tests/reference_data/LandCoverMap_Split_1.png
src/HYDRO_tests/reference_data/LandCoverMap_Split_2.png
src/HYDRO_tests/reference_data/LandCoverMap_Split_Polyline.png
src/HYDRO_tests/reference_data/LandCoverMap_TransparentPrs.png
src/HYDRO_tests/reference_data/LandCover_Triangles.png
src/HYDRO_tests/reference_data/LandCover_Triangles_Split.png
src/HYDRO_tests/reference_data/Merge_Polylines.png
src/HYDRO_tests/reference_data/NLD_water_areas_dcw.png
src/HYDRO_tests/reference_data/Polyline_Presentation.png
src/HYDRO_tests/reference_data/Shape_preview_im_zone.png
src/HYDRO_tests/reference_data/Split_Polylines_Colors.png
src/HYDRO_tests/reference_data/Split_Straight.png
src/HYDRO_tests/reference_data/cc_int_w_1.png [new file with mode: 0644]
src/HYDRO_tests/reference_data/cc_int_w_2.png [new file with mode: 0644]
src/HYDRO_tests/reference_data/cc_int_w_3.png [new file with mode: 0644]
src/HYDRO_tests/reference_data/clc_dec_150_350.png
src/HYDRO_tests/reference_data/cyprus_natural_all.png
src/HYDRO_tests/reference_data/lcm_poly_2_sections.png
src/HYDRO_tests/reference_data/merge_faces_boxes_11.png
src/HYDRO_tests/reference_data/merge_faces_boxes_12.png
src/HYDRO_tests/reference_data/merge_faces_boxes_13.png
src/HYDRO_tests/reference_data/merge_faces_boxes_14.png
src/HYDRO_tests/reference_data/merge_faces_boxes_21.png
src/HYDRO_tests/reference_data/merge_faces_boxes_22.png
src/HYDRO_tests/reference_data/merge_faces_boxes_23.png
src/HYDRO_tests/reference_data/merge_faces_boxes_24.png
src/HYDRO_tests/reference_data/merge_faces_circles_11.png
src/HYDRO_tests/reference_data/merge_faces_circles_12.png
src/HYDRO_tests/reference_data/merge_faces_circles_13.png
src/HYDRO_tests/reference_data/merge_faces_circles_14.png
src/HYDRO_tests/reference_data/merge_faces_circles_21.png
src/HYDRO_tests/reference_data/merge_faces_circles_22.png
src/HYDRO_tests/reference_data/merge_faces_circles_23.png
src/HYDRO_tests/reference_data/merge_faces_circles_24.png
src/HYDRO_tests/reference_data/p1.brep [new file with mode: 0644]
src/HYDRO_tests/reference_data/p2.brep [new file with mode: 0644]
src/HYDRO_tests/reference_data/p3.brep [new file with mode: 0644]
src/HYDRO_tests/reference_data/r2.brep [new file with mode: 0644]
src/HYDRO_tests/test_HYDROData_Bathymetry.cxx
src/HYDRO_tests/test_HYDROData_CalcCase.cxx [new file with mode: 0644]
src/HYDRO_tests/test_HYDROData_CalcCase.h [new file with mode: 0644]
src/HYDRO_tests/test_HYDROData_LandCoverMap.cxx
src/HYDRO_tests/test_HYDROData_LandCoverMap.h
src/HYDRO_tests/test_HYDROData_ShapeFile.cxx

index 19a11e70133c1da5a62a2a1675fc3b7a6b2475fb..f848958d3454977578f6e09218fb90d4bf9db893 100644 (file)
@@ -28,6 +28,7 @@
 #include <TDataStd_RealArray.hxx>
 #include <TDataStd_AsciiString.hxx>
 #include <TDataStd_Integer.hxx>
+#include <TDataStd_ExtStringArray.hxx>
 
 #include <QColor>
 #include <QFile>
@@ -35,6 +36,7 @@
 #include <QPointF>
 #include <QPolygonF>
 #include <QStringList>
+#include <QString>
 
 #ifndef LIGHT_MODE
 #include <vtkPoints.h>
@@ -436,6 +438,19 @@ void HYDROData_Bathymetry::SetFilePath( const TCollection_AsciiString& theFilePa
   TDataStd_AsciiString::Set( myLab.FindChild( DataTag_FilePath ), theFilePath );
 }
 
+void HYDROData_Bathymetry::SetFilePaths( const QStringList& theFilePaths )
+{
+  int i = 1;
+  Handle_TDataStd_ExtStringArray TExtStrArr = TDataStd_ExtStringArray::Set( myLab.FindChild( DataTag_FilePaths ), 1, theFilePaths.size() );
+  foreach (QString filepath, theFilePaths)
+  {
+    std::string sstr = filepath.toStdString();
+    const char* Val = sstr.c_str();
+    TExtStrArr->SetValue(i, TCollection_ExtendedString(Val));
+    i++;
+  }
+}
+
 TCollection_AsciiString HYDROData_Bathymetry::GetFilePath() const
 {
   TCollection_AsciiString aRes;
@@ -447,10 +462,52 @@ TCollection_AsciiString HYDROData_Bathymetry::GetFilePath() const
     if ( aLabel.FindAttribute( TDataStd_AsciiString::GetID(), anAsciiStr ) )
       aRes = anAsciiStr->Get();
   }
+  else
+  {
+    aLabel = myLab.FindChild( DataTag_FilePaths, false );
+    if ( !aLabel.IsNull() )
+    {
+      Handle(TDataStd_ExtStringArray) anExtStrArr;
+      if ( aLabel.FindAttribute( TDataStd_ExtStringArray::GetID(), anExtStrArr ) )
+        aRes = anExtStrArr->Value(1); //try take the first; convert extstring to asciistring
+    }
+  }
 
   return aRes;
 }
 
+QStringList HYDROData_Bathymetry::GetFilePaths() const
+{
+  QStringList aResL;
+
+  TDF_Label aLabel = myLab.FindChild( DataTag_FilePaths, false );
+  if ( !aLabel.IsNull() )
+  {
+    Handle(TDataStd_ExtStringArray) anExtStrArr;
+    if ( aLabel.FindAttribute( TDataStd_ExtStringArray::GetID(), anExtStrArr ) )
+    {
+      for (int i = anExtStrArr->Lower(); i <= anExtStrArr->Upper(); i++ )
+      {
+        Standard_ExtString str = anExtStrArr->Value(i).ToExtString();
+        TCollection_AsciiString aText (str);
+        aResL << QString(aText.ToCString());
+      }
+    }
+  }
+  else //backward compatibility 
+  {
+    TDF_Label anOldLabel = myLab.FindChild( DataTag_FilePath, false );
+    if ( !anOldLabel.IsNull() )
+    {
+      Handle(TDataStd_AsciiString) anAsciiStr;
+      if ( anOldLabel.FindAttribute( TDataStd_AsciiString::GetID(), anAsciiStr ) )
+        aResL << QString(anAsciiStr->Get().ToCString());
+    }
+  }
+
+  return aResL;
+}
+
 void HYDROData_Bathymetry::SetAltitudesInverted( const bool theIsInverted,
                                                  const bool theIsUpdate )
 {
@@ -495,46 +552,54 @@ bool HYDROData_Bathymetry::IsAltitudesInverted() const
   return aRes;
 }
 
-bool HYDROData_Bathymetry::ImportFromFile( const TCollection_AsciiString& theFileName )
+bool HYDROData_Bathymetry::ImportFromFiles( const QStringList& theFileNames )
 {
-  // Try to open the file
-  QFile aFile( theFileName.ToCString() );
-  if ( !aFile.exists() || !aFile.open( QIODevice::ReadOnly ) )
-    return false;
+  AltitudePoints AllPoints;
+  bool Stat = false;
 
-  bool aRes = false;
+  foreach (QString theFileName, theFileNames)
+  {
+    // Try to open the file
+    QFile aFile( theFileName );
+    if ( !aFile.exists() || !aFile.open( QIODevice::ReadOnly ) )
+      continue;
 
-  QString aFileSuf = QFileInfo( aFile ).suffix().toLower();
+    QString aFileSuf = QFileInfo( aFile ).suffix().toLower();
 
-  HYDROData_Bathymetry::AltitudePoints aPoints;
+    HYDROData_Bathymetry::AltitudePoints aPoints;
 
-  // Try to import the file
-  if ( aFileSuf == "xyz" )
-    aRes = importFromXYZFile( aFile, aPoints );
-  else if ( aFileSuf == "asc" )
-    aRes = importFromASCFile( aFile, aPoints );
+    // Try to import the file
+    if ( aFileSuf == "xyz" )
+      Stat = importFromXYZFile( aFile, aPoints );
+    else if ( aFileSuf == "asc" )
+      Stat = importFromASCFile( aFile, aPoints );
 
-  // Close the file
-  aFile.close();
-  
+    if (!Stat)
+      continue; //ignore this points
+
+    // Close the file
+    aFile.close();
+
+    AllPoints.insert(AllPoints.end(), aPoints.begin(), aPoints.end());
+  }
 
   // Convert from global to local CS
   Handle_HYDROData_Document aDoc = HYDROData_Document::Document( myLab );
-  HYDROData_Bathymetry::AltitudePoints::iterator anIter = aPoints.begin(), aLast = aPoints.end();
+  HYDROData_Bathymetry::AltitudePoints::iterator anIter = AllPoints.begin(), aLast = AllPoints.end();
   for ( ; anIter!=aLast; ++anIter )
   {
     HYDROData_Bathymetry::AltitudePoint& aPoint = *anIter;
     aDoc->Transform( aPoint.X, aPoint.Y, aPoint.Z, true );
   }
 
-  if ( aRes )
+  if ( Stat )
   {
     // Update file path and altitude points of this Bathymetry
-    SetFilePath( theFileName );
-    SetAltitudePoints( aPoints );
+    SetFilePaths (theFileNames );
+    SetAltitudePoints( AllPoints );
   }
 
-  return aRes && !aPoints.empty();
+  return Stat && !AllPoints.empty();
 }
 
 bool HYDROData_Bathymetry::importFromXYZFile( QFile&          theFile,
index 63a44f92f47f11e6db601d8101047f17dbab1831..4c8a23e64e694ade5e421e9cdb37c8645eddce37 100644 (file)
@@ -60,6 +60,7 @@ protected:
     DataTag_First = HYDROData_IAltitudeObject::DataTag_First + 100, ///< first tag, to reserve
     DataTag_AltitudePoints,    ///< altitude points, array of reals
     DataTag_FilePath,          ///< bathymetry imported file path
+    DataTag_FilePaths,         ///< bathymetry imported file paths
     DataTag_AltitudesInverted, ///< flag to invert z values
   };
 
@@ -122,11 +123,15 @@ public:
    */
   HYDRODATA_EXPORT void                     SetFilePath( const TCollection_AsciiString& theFilePath );
 
+  HYDRODATA_EXPORT void                     SetFilePaths( const QStringList& theFilePaths );
+
   /**
    * Returns uploaded bathymetry file path
    */
   HYDRODATA_EXPORT TCollection_AsciiString  GetFilePath() const;
 
+  HYDRODATA_EXPORT QStringList GetFilePaths() const;
+
   /**
    * Set flag indicating needs to invert altitude values
    * \param theIsInverted new invert value
@@ -146,7 +151,7 @@ public:
    * \param theFileName the path to file
    * \return \c true if file has been successfully read
    */
-  HYDRODATA_EXPORT virtual bool             ImportFromFile( const TCollection_AsciiString& theFileName );
+  HYDRODATA_EXPORT virtual bool             ImportFromFiles( const QStringList& theFileNames );
 
   HYDRODATA_EXPORT Handle_HYDROData_PolylineXY CreateBoundaryPolyline() const;
 
index 8c2752409ddd0044853091330e7a4f32b0bd8bd5..fef44bd1741569f6fb7ffead13ba75e45e49d84e 100644 (file)
@@ -282,12 +282,15 @@ void HYDROData_CalculationCase::Update()
   HYDROData_SplitToZonesTool::SplitDataList aZonesList, anEdgesList;
 
   Handle(HYDROData_PolylineXY) aBoundaryPolyline = GetBoundaryPolyline();
+
+  HYDROData_SequenceOfObjects InterPolys = GetInterPolyObjects();
+
   HYDROData_SequenceOfObjects aGeomObjects = GetGeometryObjects();
   if ( !aGeomObjects.IsEmpty() ) {
     HYDROData_SequenceOfObjects aGeomGroups = GetGeometryGroups();
 
     HYDROData_SplitToZonesTool::SplitDataList aSplitObjects =
-      HYDROData_SplitToZonesTool::Split( aGeomObjects, aGeomGroups, aBoundaryPolyline );
+      HYDROData_SplitToZonesTool::Split( aGeomObjects, aGeomGroups, aBoundaryPolyline, InterPolys );
     if ( !aSplitObjects.isEmpty() ) {
       HYDROData_SplitToZonesTool::SplitDataListIterator anIter( aSplitObjects );
       while( anIter.hasNext() ) {
@@ -902,6 +905,20 @@ double HYDROData_CalculationCase::GetStricklerCoefficientForPoint( const gp_XY&
   return aCoeff;
 }
 
+std::vector<double> HYDROData_CalculationCase::GetStricklerCoefficientForPoints(const std::vector<gp_XY>& thePoints,
+  double DefValue, bool UseMax ) const
+{
+  Handle( HYDROData_LandCoverMap ) aLCM = GetLandCoverMap();
+  Handle( HYDROData_StricklerTable ) aTable = GetStricklerTable();
+  std::vector<double> theCoeffs;
+  if( aLCM.IsNull() || aTable.IsNull() )
+    return theCoeffs;
+
+  aLCM->ClassifyPoints(thePoints, aTable, theCoeffs, DefValue, UseMax );
+
+  return theCoeffs;
+}
+
 Handle(HYDROData_Region) HYDROData_CalculationCase::GetRegionFromPoint( const gp_XY& thePoint ) const
 {
   Handle(HYDROData_Region) aResRegion;
@@ -1379,3 +1396,32 @@ bool HYDROData_CalculationCase::GetRule( int theIndex,
   return HYDROData_PriorityQueue::GetRule( aRulesLab, theIndex,
     theObject1, thePriority, theObject2, theMergeType );
 }
+
+bool HYDROData_CalculationCase::AddInterPoly( const Handle(HYDROData_PolylineXY)& theInterPolyline )
+{
+  HYDROData_CalculationCase::DataTag aDataTag = DataTag_InterPoly;
+
+  if ( HasReference( theInterPolyline, aDataTag ) )
+    return false; 
+
+  AddReferenceObject( theInterPolyline, aDataTag );
+
+  return true;
+}
+
+HYDROData_SequenceOfObjects HYDROData_CalculationCase::GetInterPolyObjects() const
+{
+  return GetReferenceObjects( DataTag_InterPoly ); 
+}
+
+void HYDROData_CalculationCase::RemoveInterPolyObject( const Handle(HYDROData_PolylineXY)& theInterPolyline ) 
+{
+  if ( theInterPolyline.IsNull() )
+    return;
+
+  RemoveReferenceObject( theInterPolyline->Label(), DataTag_InterPoly );
+
+}
+
+
+
index 1780ca9c682f246a4734398b3972a4acd3b39e08..ca0fd81cb7440fd67c66a972ae83b618904bd734 100644 (file)
@@ -24,6 +24,7 @@
 #include <HYDROData_PriorityQueue.h>
 #include <HYDROData_Zone.h>
 #include <HYDROData_Warning.h>
+#include <vector>
 
 #ifdef WIN32
   #pragma warning ( disable: 4251 )
@@ -96,6 +97,7 @@ public:
     DataTag_CustomRules,               ///< custom rules
     DataTag_AssignmentMode,            ///< assignment mode
     DataTag_StricklerTable,            ///< reference Strickler table
+    DataTag_InterPoly,                 ///< intersection polyline
 
     DataTag_LandCover_Obsolete,                 ///< reference land covers
     DataTag_CustomLandCoverRules_Obsolete,      ///< custom rules for land covers priority
@@ -274,6 +276,12 @@ public:
    */
   HYDRODATA_EXPORT virtual void RemoveSplitGroups();
 
+  HYDRODATA_EXPORT virtual bool AddInterPoly( const Handle(HYDROData_PolylineXY)& theInterPolyline );
+
+  HYDRODATA_EXPORT virtual void RemoveInterPolyObject( const Handle(HYDROData_PolylineXY)& theInterPolyline );
+
+  HYDRODATA_EXPORT virtual HYDROData_SequenceOfObjects GetInterPolyObjects() const;
+
   /**
    * Exports the calculation case data (shell and groups) to GEOM module.
    * \param theStudyId the id of the study where the GEOM module should be used for export
@@ -333,6 +341,10 @@ public:
    */
   HYDRODATA_EXPORT double GetStricklerCoefficientForPoint( const gp_XY& thePoint ) const;
 
+  HYDRODATA_EXPORT std::vector<double> GetStricklerCoefficientForPoints(const std::vector<gp_XY>& thePoints,
+                                                                        double DefValue,
+                                                                        bool UseMax ) const;
+
   /**
    * Returns altitudes for given points on given region.
    * \param thePoints the points to examine
index b801df77bb1ed85b8ad6e8e507f4db0e3c1afd38..9e3a8f913b0d8565f1cc00b59e0cd5f3133ac629 100644 (file)
@@ -57,7 +57,7 @@ Standard_Boolean HYDROData_FaceClassifier_BndBoxTreeSelector::Accept (const Stan
 
 }
 
-void HYDROData_LCM_FaceClassifier::Classify( const std::vector<gp_Pnt2d>& thePoints, 
+void HYDROData_LCM_FaceClassifier::Classify( const std::vector<gp_XY>& thePoints, 
                                              std::vector<std::set <QString> >& theTypes,
                                              std::vector<NCollection_Map<TopoDS_Face> >* theFaces) const
 {
@@ -75,11 +75,11 @@ void HYDROData_LCM_FaceClassifier::Classify( const std::vector<gp_Pnt2d>& thePoi
   NCollection_UBTreeFiller <Standard_Integer, Bnd_Box2d> aTreeFiller (aTree);
   NCollection_IndexedDataMap<TopoDS_Face, BRepTopAdaptor_FClass2d*> aMapF2Class2d;
 
-  int NbF= aFaces.Extent();
+  int NbF = aFaces.Extent();
   std::vector<BRepTopAdaptor_FClass2d*> fclass2dpointers;
   fclass2dpointers.reserve(NbF);
 
-  for (int i = 1; i < NbF; i++)
+  for (int i = 1; i <= NbF; i++)
   {
     Bnd_Box2d B;
     const TopoDS_Face& F = TopoDS::Face(aFaces(i));
index 6afd303d6d763d894c9626cb628db91d800beca4..1a83a7efede3c8bee1c7bc8de75bb241eba396ff 100644 (file)
@@ -89,7 +89,7 @@ public:
   ~HYDROData_LCM_FaceClassifier()
   {};
 
-  void Classify( const std::vector<gp_Pnt2d>& thePoints, 
+  void Classify( const std::vector<gp_XY>& thePoints, 
     std::vector<std::set <QString> >& theTypes, 
     std::vector<NCollection_Map <TopoDS_Face> >* theFaces) const;
 
index 7afb3132cdb25b1224543faf1a4c08cd5adc8872..4b816d8db04ae6591be44cf590584287e59350b3 100644 (file)
@@ -1259,8 +1259,37 @@ void HYDROData_LandCoverMap::UpdateLocalCS( double theDx, double theDy )
   SetShape( aLocatedShape );
 }
 
-void HYDROData_LandCoverMap::ClassifyPoints( const std::vector<gp_Pnt2d>& thePoints, std::vector<std::set <QString> >& theTypes ) const
+void HYDROData_LandCoverMap::ClassifyPoints( const std::vector<gp_XY>& thePoints, std::vector<std::set <QString> >& theTypes ) const
 {
   HYDROData_LCM_FaceClassifier FC(this);
   FC.Classify(thePoints, theTypes, NULL);
 }
+
+void HYDROData_LandCoverMap::ClassifyPoints( const std::vector<gp_XY>& thePoints,  
+  Handle(HYDROData_StricklerTable) theTable, 
+  std::vector<double>& theCoeffs, double DefValue, bool UseMax ) const
+{
+  std::vector<std::set <QString> > Types;
+  HYDROData_LCM_FaceClassifier FC(this);
+  FC.Classify(thePoints, Types, NULL);
+  theCoeffs.resize(thePoints.size());
+  for (size_t i = 0; i < Types.size(); i++)
+  {
+    const std::set<QString>& SStr = Types[i];
+    if (SStr.empty())
+      theCoeffs[i] = DefValue;
+    else
+    {
+      std::set<QString>::const_iterator it;
+      std::vector<double> C1(SStr.size());
+      for (it = SStr.begin(); it != SStr.end(); ++it)
+        C1.push_back(theTable->Get( *it, DefValue ));
+      double Val;
+      if (UseMax)
+        Val = *(std::max_element(std::begin(C1), std::end(C1)));
+      else
+        Val = *(std::min_element(std::begin(C1), std::end(C1)));
+      theCoeffs[i] = Val;
+    }
+  }
+}
index 43c074ba183ce89522b36b0d440385079b1c01fd..e009351a2baa6e20176ca49c3baa0b7218103401 100644 (file)
@@ -41,7 +41,7 @@ class TopoDS_Iterator;
 class TopTools_ListOfShape;
 class Handle( HYDROData_PolylineXY );
 class Handle( HYDROData_Object );
-class gp_Pnt2d;
+class gp_XY;
 
 class HYDROData_LandCoverMap : public HYDROData_Entity
 {
@@ -150,7 +150,11 @@ public:
 
   HYDRODATA_EXPORT virtual void UpdateLocalCS( double theDx, double theDy );
 
-  HYDRODATA_EXPORT void ClassifyPoints( const std::vector<gp_Pnt2d>& thePoints, std::vector<std::set <QString> >& theTypes ) const;
+  HYDRODATA_EXPORT void ClassifyPoints( const std::vector<gp_XY>& thePoints, std::vector<std::set <QString> >& theTypes ) const;
+
+  HYDRODATA_EXPORT void ClassifyPoints( const std::vector<gp_XY>& thePoints,
+    Handle(HYDROData_StricklerTable) theTable, 
+    std::vector<double>& theCoeffs, double DefValue, bool UseMax ) const;
 
 protected:
   void SetShape( const TopoDS_Shape& );
index ba3359c295842b39e27564f0de103373f189e50a..e5a1d8428aa7d3b87393a9bd3eb1f5e7eb896f5c 100644 (file)
@@ -40,6 +40,9 @@
 #include <Geom_Plane.hxx>
 #include <BRepBuilderAPI_FindPlane.hxx>
 
+#include <BOPAlgo_BOP.hxx>
+#include <BOPAlgo_Builder.hxx>
+
 //#define DEB_SPLIT_TO_ZONES 1
 //#define DEB_SPLIT_TO_ZONES_CHECK_PARTITION 1
 #if (defined (DEB_SPLIT_TO_ZONES) || defined(DEB_SPLIT_TO_ZONES_CHECK_PARTITION))
@@ -130,7 +133,8 @@ Standard_Integer HYDROData_SplitToZonesTool::SplitFaces(const TopoDS_Compound& t
 HYDROData_SplitToZonesTool::SplitDataList
   HYDROData_SplitToZonesTool::Split( const HYDROData_SequenceOfObjects&  theObjectList,
                                      const HYDROData_SequenceOfObjects&  theGroupsList,
-                                     const Handle(HYDROData_PolylineXY)& thePolyline )
+                                     const Handle(HYDROData_PolylineXY)& thePolyline,
+                                     const HYDROData_SequenceOfObjects& InterPolys)
 {
   DEBTRACE("Split");
   SplitDataList anOutputSplitDataList;
@@ -547,6 +551,9 @@ HYDROData_SplitToZonesTool::SplitDataList
       }
     }
   }
+
+  AddInternalEdges(aDM2, InterPolys);
+
   // Step 4. Fill output structure.
 #ifdef DEB_SPLIT_TO_ZONES
   TCollection_AsciiString aNam4 ("SC_");
@@ -609,6 +616,78 @@ HYDROData_SplitToZonesTool::SplitDataList
 {
   HYDROData_SequenceOfObjects aGeomGroups;
   Handle(HYDROData_PolylineXY) aPolyline;
+  HYDROData_SequenceOfObjects InterPolys;
+
+  return Split( theObjectList, aGeomGroups, aPolyline, InterPolys );
+}
+
+void HYDROData_SplitToZonesTool::AddInternalEdges(HYDROData_DataMapOfShapeListOfShape& DM,
+   const HYDROData_SequenceOfObjects& thePolylines)
+{
+
+  HYDROData_SequenceOfObjects::Iterator it(thePolylines);
+  TopTools_ListOfShape Wires;
+  for (;it.More();it.Next())
+  {
+    Handle(HYDROData_PolylineXY) P = Handle(HYDROData_PolylineXY)::DownCast(it.Value());
+    Wires.Append(P->GetShape());
+    //Handle(TopTools_HSequenceOfShape) aConnectedWires = new TopTools_HSequenceOfShape;
+    //if (P->GetNbConnectedWires(aConnectedWires) > 0)
+    //  Wires.Append(aConnectedWires->Value(1));
+  }
+
+  HYDROData_DataMapOfShapeListOfShape newDM;
+
+  for (int i = 1; i <= DM.Extent();i++)
+  {
+    const TopoDS_Shape& K = DM.FindKey(i);
+    const TopTools_ListOfShape& V = DM.FindFromIndex(i);
+    TopTools_ListOfShape out;
+    if (K.ShapeType() == TopAbs_FACE)
+    {
+      CutByEdges(K, Wires, out);
+      TopTools_ListIteratorOfListOfShape it(out);
+      for (;it.More(); it.Next())
+      {
+        const TopoDS_Shape& NF = it.Value();
+        if (!NF.IsNull())
+          newDM.Add(NF, V);
+      }
+    }
+    else
+      newDM.Add(K, V); // ignore edges, wires...
+  }
+
+  DM = newDM;
+}
+
+
+int HYDROData_SplitToZonesTool::CutByEdges(const TopoDS_Shape& InSh, const TopTools_ListOfShape& InEdges,
+  TopTools_ListOfShape& outShs)
+{
+  int anError;
+  if (InSh.IsNull())
+    return -1;
+  if (InEdges.IsEmpty())
+  {
+    outShs.Clear();
+    outShs.Append(InSh);
+    return 0;
+  }
+  TopTools_ListIteratorOfListOfShape anIt;
+  BOPAlgo_Builder anAlgo;
+  anAlgo.AddArgument(InSh);
+  anIt.Initialize( InEdges );
+  for( ; anIt.More(); anIt.Next() )
+    anAlgo.AddArgument( anIt.Value() );
+
+  anAlgo.Perform(); 
+  anError = anAlgo.ErrorStatus();
+  if (anError)
+    return anError;
 
-  return Split( theObjectList, aGeomGroups, aPolyline );
+  outShs = anAlgo.Modified( InSh );
+  if (outShs.IsEmpty())
+    outShs.Append(InSh);
+  return 0;
 }
index eaa58208496cd17581c277b36cf2792c8fcd9427..530e7f2aba241f1606e998177afb99c67fe4df50 100644 (file)
@@ -87,10 +87,17 @@ public:
 
   static SplitDataList       Split( const HYDROData_SequenceOfObjects&  theObjectList,
                                     const HYDROData_SequenceOfObjects&  theGroupsList,
-                                    const Handle(HYDROData_PolylineXY)& thePolyline );
+                                    const Handle(HYDROData_PolylineXY)& thePolyline,
+                                    const HYDROData_SequenceOfObjects& InterPolys );
 
   static SplitDataList       Split( const HYDROData_SequenceOfObjects&  theObjectList );
 
+  static void AddInternalEdges(HYDROData_DataMapOfShapeListOfShape& DM,
+                               const HYDROData_SequenceOfObjects& thePolylines);
+
+  static int CutByEdges(const TopoDS_Shape& InSh, const TopTools_ListOfShape& InEdges,
+                        TopTools_ListOfShape& outShs);
+
   static void SetFileNames(const QString& theNameBefore, const QString& theNameAfter);
 
 private:
index 0af2109beca5c87a95531b072d709da9c1e8a64f..024b5487b5ca5f12000663da4f73477320b8f30c 100644 (file)
@@ -98,6 +98,13 @@ void HYDROGUI_CalculationOp::startOperation()
   QStringList anEntryList;
   HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetGeometryObjects( module() );
   getNamesAndEntries( aSeq, aList, anEntryList );
+  
+  QStringList List1;
+  QStringList EList1;
+
+  //add intersection polylines
+  AddInterPolylinesToList(aList, anEntryList);
+  
   aPanel->setAllGeomObjects( aList, anEntryList );
 
   // Get all polylines
@@ -171,6 +178,26 @@ void HYDROGUI_CalculationOp::startOperation()
   createPreview( false );
 }
 
+void HYDROGUI_CalculationOp::AddInterPolylinesToList(QStringList& theList, QStringList& theEntryList)
+{
+  HYDROData_Iterator anIter( doc(), KIND_POLYLINEXY );
+  Handle(HYDROData_PolylineXY) aPolylineObj;
+  QString aPolylineName;
+  for ( ; anIter.More(); anIter.Next() )
+  {
+    aPolylineObj = Handle(HYDROData_PolylineXY)::DownCast( anIter.Current() );
+    if ( !aPolylineObj.IsNull())
+    { 
+      aPolylineName = aPolylineObj->GetName();
+      if ( !aPolylineName.isEmpty() && !theList.contains(aPolylineName) )
+      {
+        theList.append( aPolylineName );
+        theEntryList.append(HYDROGUI_DataObject::dataObjectEntry( aPolylineObj ));
+      }
+    }
+  }
+}
+
 void HYDROGUI_CalculationOp::getNamesAndEntries( const HYDROData_SequenceOfObjects& theSeq, 
                                                 QStringList& theNames, QStringList& theEntries ) const
 {
@@ -510,6 +537,17 @@ void HYDROGUI_CalculationOp::onAddObjects()
       anAddedList.append( anObject->GetName() );
   }
 
+  for (int i = 0; i < aSelectedList.length(); i++)
+  {
+    Handle(HYDROData_PolylineXY) aPoly = Handle(HYDROData_PolylineXY)::DownCast( 
+      HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at( i ) ) );
+    if ( aPoly.IsNull() )
+      continue;
+
+    if ( myEditedObject->AddInterPoly( aPoly ) )
+      anAddedList.append( aPoly->GetName() );
+  }
+
   if ( !anAddedList.isEmpty() )
   {
     aPanel->includeGeomObjects( anAddedList );
@@ -540,6 +578,17 @@ void HYDROGUI_CalculationOp::onRemoveObjects()
     myEditedObject->RemoveGeometryObject( anObject );
   }
 
+  for (int i = 0; i < aSelectedList.length(); i++)
+  {
+    Handle(HYDROData_PolylineXY) aPoly = Handle(HYDROData_PolylineXY)::DownCast( 
+      HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at(i) ) );
+    if ( aPoly.IsNull() )
+      continue;
+
+    setObjectVisibility( aPoly, false );
+    myEditedObject->RemoveInterPolyObject ( aPoly ); 
+  }
+
   module()->update( UF_OCCViewer );
   aPanel->excludeGeomObjects( aSelectedList );
 }
@@ -1156,7 +1205,9 @@ void HYDROGUI_CalculationOp::createPreview( const bool theLandCoverMap )
   else if ( !theLandCoverMap && myShowGeomObjects )
   {
     HYDROData_SequenceOfObjects aSeqGO = myEditedObject->GetGeometryObjects();
+    HYDROData_SequenceOfObjects aSeqP = myEditedObject->GetInterPolyObjects();
     aSeq.Append( aSeqGO );
+    aSeq.Append( aSeqP );
   }
 
   Handle(HYDROData_Entity) anEntity;
index 42599f59614c65804b3b47dca438998bd22a12d1..909256474537af6d9825243262e5f4621c0921dc 100644 (file)
@@ -163,6 +163,8 @@ private:
 
   bool                            createRegion( const QList<SUIT_DataObject*>& theZonesList );
 
+  void                            AddInterPolylinesToList(QStringList& theList, QStringList& theEntryList);
+
   bool confirmRegionsChange() const;
   bool confirmModeChange() const;
   bool confirmOrderChange() const;
index 76ab3075e8a35c64961f987bddd71e177d01e097..68cdbeadfa5de53935a39c1b18854049c5b6dcee 100644 (file)
 #include <SUIT_ResourceMgr.h>
 #include <SUIT_Session.h>
 
+#include <QListWidget>
 #include <QGroupBox>
 #include <QLabel>
 #include <QLayout>
 #include <QLineEdit>
 #include <QPicture>
-#include <QToolButton>
+#include <QPushButton>
 #include <QCheckBox>
 
 HYDROGUI_ImportBathymetryDlg::HYDROGUI_ImportBathymetryDlg( HYDROGUI_Module* theModule, const QString& theTitle )
@@ -42,18 +43,26 @@ HYDROGUI_ImportBathymetryDlg::HYDROGUI_ImportBathymetryDlg( HYDROGUI_Module* the
 
   QLabel* aFileNameLabel = new QLabel( tr( "FILE_NAME" ), myFileNameGroup );
 
-  myFileName = new QLineEdit( myFileNameGroup );
-  myFileName->setReadOnly( true );
+  myFileNames = new QListWidget( myFileNameGroup );
+  //myFileNames->viewport()->setAttribute( Qt::WA_TransparentForMouseEvents );
+  //myFileNames->setFocusPolicy(Qt::FocusPolicy::NoFocus);
 
-  QToolButton* aBrowseBtn = new QToolButton( myFileNameGroup );
+  QPushButton* aBrowseBtn = new QPushButton( myFileNameGroup );
+  aBrowseBtn->setText("Load files(s)");
   aBrowseBtn->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "BROWSE_ICO" ) ) );
 
-  QBoxLayout* aFileNameLayout = new QHBoxLayout( myFileNameGroup );
+  QBoxLayout* aFileNameLayout = new QVBoxLayout( myFileNameGroup );
+
+  myFuseIntoOne = new QCheckBox();
+  myFuseIntoOne->setText("Import as one bathemetry object (fuse the geometry data)");
+  myFuseIntoOne->setEnabled( false );
+
   aFileNameLayout->setMargin( 5 );
   aFileNameLayout->setSpacing( 5 );
-  aFileNameLayout->addWidget( aFileNameLabel );
-  aFileNameLayout->addWidget( myFileName );
+  aFileNameLayout->addWidget( aFileNameLabel );  
   aFileNameLayout->addWidget( aBrowseBtn );
+  aFileNameLayout->addWidget( myFileNames );
+  aFileNameLayout->addWidget( myFuseIntoOne );
 
   // Bathymetry name
   myObjectNameGroup = new QGroupBox( tr( "BATHYMETRY_NAME" ) );
@@ -77,6 +86,7 @@ HYDROGUI_ImportBathymetryDlg::HYDROGUI_ImportBathymetryDlg( HYDROGUI_Module* the
   addStretch();
 
   connect( aBrowseBtn, SIGNAL( clicked() ), this, SLOT( onBrowse() ) );
+  connect( myFuseIntoOne, SIGNAL( stateChanged(int) ), this, SLOT( onStateChanged(int) ) );
 }
 
 HYDROGUI_ImportBathymetryDlg::~HYDROGUI_ImportBathymetryDlg()
@@ -85,15 +95,19 @@ HYDROGUI_ImportBathymetryDlg::~HYDROGUI_ImportBathymetryDlg()
 
 void HYDROGUI_ImportBathymetryDlg::reset()
 {
-  myFileName->clear();
+  myFileNames->clear();
   myObjectName->clear();
   myObjectNameGroup->setEnabled( false );
+  myFuseIntoOne->setEnabled( false );
 }
 
 void HYDROGUI_ImportBathymetryDlg::setObjectName( const QString& theName )
 {
   myObjectName->setText( theName );
-  myObjectNameGroup->setEnabled( !theName.isEmpty() || !myFileName->text().isEmpty() );
+  bool ObjNameState = myObjectName->isEnabled();
+  myObjectNameGroup->setEnabled( !theName.isEmpty() || myFileNames->count() > 0 );
+  myObjectName->setEnabled(ObjNameState);
+  myFuseIntoOne->setEnabled( myFileNames->count() > 1 );
 }
 
 QString HYDROGUI_ImportBathymetryDlg::getObjectName() const
@@ -101,17 +115,38 @@ QString HYDROGUI_ImportBathymetryDlg::getObjectName() const
   return myObjectName->text();
 }
 
-void HYDROGUI_ImportBathymetryDlg::setFileName( const QString& theFileName )
+void HYDROGUI_ImportBathymetryDlg::setFileNames( const QStringList& theFileNames )
 {
-  myFileName->setText( theFileName );
+  myFileNames->clear();
+  myFileNames->addItems( theFileNames );
+
+  if (myFuseIntoOne->isChecked() || theFileNames.count() == 1 )
+  {
+    myObjectNameGroup->setEnabled( true );
+    myObjectName->setEnabled( true );
+  }
+  else
+  {
+    myObjectNameGroup->setEnabled( false );
+    myObjectName->setEnabled( false );
+  }
+  //
+  if (theFileNames.count() == 1)
+    myFuseIntoOne->setEnabled( false );
+  else if (theFileNames.count() > 1)
+    myFuseIntoOne->setEnabled( true );
 
-  if ( !myObjectNameGroup->isEnabled() )
-    myObjectNameGroup->setEnabled( !theFileName.isEmpty() );
 }
 
-QString HYDROGUI_ImportBathymetryDlg::getFileName() const
+QStringList HYDROGUI_ImportBathymetryDlg::getFileNames() const
 {
-  return myFileName->text();
+  QStringList stritems;
+  for(int i = 0; i < myFileNames->count(); ++i)
+  {
+    QListWidgetItem* item = myFileNames->item(i);
+    stritems << item->text();
+  }
+  return stritems;
 }
 
 void HYDROGUI_ImportBathymetryDlg::setInvertAltitudes( const bool theIsInvert )
@@ -124,18 +159,53 @@ bool HYDROGUI_ImportBathymetryDlg::isInvertAltitudes() const
   return myInvertAltitudes->isChecked();
 }
 
+void HYDROGUI_ImportBathymetryDlg::setFuseIntoOneOptionChecked( bool isFIO )
+{
+  myFuseIntoOne->setChecked( isFIO );
+}
+
+bool HYDROGUI_ImportBathymetryDlg::isFuseIntoOneOptionChecked() const
+{
+  return myFuseIntoOne->isChecked();
+}
+
+void HYDROGUI_ImportBathymetryDlg::setFuseIntoOneOptionEnabled(bool enabled)
+{
+  myFuseIntoOne->setEnabled(enabled);
+}
+
+bool HYDROGUI_ImportBathymetryDlg::isFuseIntoOneOptionEnabled() const
+{
+  return myFuseIntoOne->isEnabled();
+}
+
 void HYDROGUI_ImportBathymetryDlg::onBrowse()
 {
   QString aFilter( tr( "BATHYMETRY_FILTER" ) );
-  QString aFileName = SUIT_FileDlg::getFileName( this, "", aFilter, tr( "IMPORT_BATHYMETRY_FROM_FILE" ), true );
+  QStringList aFileNames = SUIT_FileDlg::getOpenFileNames( this, "", aFilter, tr( "IMPORT_BATHYMETRY_FROM_FILE" ), true );
 
-  if( !aFileName.isEmpty() )
+  if( !aFileNames.isEmpty() )
   {
-    setFileName( aFileName );
-    emit FileSelected( aFileName );
+    setFileNames( aFileNames );
+    emit FileSelected( aFileNames );
   }
 }
 
-
+void HYDROGUI_ImportBathymetryDlg::onStateChanged (int state)
+{
+  if (getFileNames().count() > 1)
+  {
+    if (state == Qt::Checked)
+    {
+      myObjectName->setEnabled(true);
+      myObjectNameGroup->setEnabled(true);
+    }
+    else if (state == Qt::Unchecked)
+    {
+      myObjectName->setEnabled(false);
+      myObjectNameGroup->setEnabled(false);
+    }
+  }
+}
 
 
index d854e1bb69d1f8a22a23eb42ed3be988c31f2cd7..438bddb461d7039717fad29c49b8cbfa0854e5e0 100644 (file)
@@ -26,6 +26,8 @@
 class QGroupBox;
 class QLineEdit;
 class QCheckBox;
+class QListWidget;
+class QStringList;
 
 class HYDROGUI_ImportBathymetryDlg : public HYDROGUI_InputPanel
 {
@@ -40,24 +42,33 @@ public:
   void                       setObjectName( const QString& theName );
   QString                    getObjectName() const;
 
-  void                       setFileName( const QString& theFileName );
-  QString                    getFileName() const;
+  void                       setFileNames( const QStringList& theFileName );
+  QStringList                getFileNames() const;
 
   void                       setInvertAltitudes( const bool theIsInvert );
   bool                       isInvertAltitudes() const;
 
+  void                       setFuseIntoOneOptionChecked( bool isFIO );
+  bool                       isFuseIntoOneOptionChecked() const;
+  void                       setFuseIntoOneOptionEnabled(bool enabled);
+  bool                       isFuseIntoOneOptionEnabled() const;
+  
+
 signals:
-  void                       FileSelected( const QString& theFileName );
+  void                       FileSelected( const QStringList& theFileName );
 
 protected slots:
   void                       onBrowse();
+  void                       onStateChanged (int state);
 
 private:
   QGroupBox*                 myFileNameGroup;
-  QLineEdit*                 myFileName;
+  QListWidget*               myFileNames;
 
   QCheckBox*                 myInvertAltitudes;
 
+  QCheckBox*                 myFuseIntoOne;
+
   QGroupBox*                 myObjectNameGroup;
   QLineEdit*                 myObjectName;
 };
index d8b3abbcbed60229142e862776e673b9dd715e6c..02ea51ac293063d1dff35c8ef40ae345dfa2bcc9 100644 (file)
 #include <SVTK_ViewModel.h>
 
 #include <QFileInfo>
+#include <QSet>
+#include <SUIT_MessageBox.h>
+#include <SUIT_Desktop.h>
+
 
 HYDROGUI_ImportBathymetryOp::HYDROGUI_ImportBathymetryOp( HYDROGUI_Module* theModule, 
                                                          const bool theIsEdit  )
@@ -65,12 +69,15 @@ void HYDROGUI_ImportBathymetryOp::startOperation()
     if( !myEditedObject.IsNull() )
     {
       QString aName = myEditedObject->GetName();
-      QString aFileName = HYDROGUI_Tool::ToQString( myEditedObject->GetFilePath() );
+      QStringList aFileNames = myEditedObject->GetFilePaths();
       bool anIsAltitudesInverted = myEditedObject->IsAltitudesInverted();
 
+      aPanel->setFuseIntoOneOptionChecked( true );
+
       aPanel->setObjectName( aName );
-      aPanel->setFileName( aFileName );
+      aPanel->setFileNames( aFileNames ); 
       aPanel->setInvertAltitudes( anIsAltitudesInverted );
+      aPanel->setFuseIntoOneOptionEnabled( false );
     }
   }
 }
@@ -89,7 +96,7 @@ HYDROGUI_InputPanel* HYDROGUI_ImportBathymetryOp::createInputPanel() const
 {
   HYDROGUI_InputPanel* aPanel = new HYDROGUI_ImportBathymetryDlg( module(), getName() );
   
-  connect ( aPanel, SIGNAL( FileSelected( const QString& ) ), SLOT( onFileSelected() ) );
+  connect ( aPanel, SIGNAL( FileSelected( const QStringList& ) ), SLOT( onFileSelected() ) );
 
   return aPanel;
 }
@@ -110,64 +117,151 @@ bool HYDROGUI_ImportBathymetryOp::processApply( int& theUpdateFlags,
     return false;
   }
 
-  QString aFileName = aPanel->getFileName().simplified();
-  bool anIsInvertAltitudes = aPanel->isInvertAltitudes();
+  QStringList aFileNames = aPanel->getFileNames();
 
-  if ( aFileName.isEmpty() )
-  {
-    theErrorMsg = tr( "INCORRECT_FILE_NAME" );
-    return false;
-  }
+  QStringList DummyFileList;
+  foreach (QString str, aFileNames)
+    DummyFileList << str.simplified();
 
-  QFileInfo aFileInfo( aFileName );
-  if ( !aFileInfo.exists() || !aFileInfo.isReadable() )
+  aFileNames = DummyFileList;
+  DummyFileList.clear();
+
+  if ( aFileNames.isEmpty() )
   {
-    theErrorMsg = tr( "FILE_NOT_EXISTS_OR_CANT_BE_READ" ).arg( aFileName );
+    theErrorMsg = tr( "EMPTY_FILENAMES" );
     return false;
   }
 
-  if( !myIsEdit || ( !myEditedObject.IsNull() && myEditedObject->GetName() != anObjectName ) )
+  QString inexistWarn;
+
+  foreach (QString aFileName, aFileNames )
   {
-    // check that there are no other objects with the same name in the document
-    Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), anObjectName );
-    if( !anObject.IsNull() )
+    QFileInfo aFileInfo( aFileName );
+    if ( !aFileInfo.exists() || !aFileInfo.isReadable() )
     {
-      theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( anObjectName );
-      return false;
+      inexistWarn += "\n" + aFileName;
+      continue;
     }
+    DummyFileList << aFileName;
   }
 
-  Handle(HYDROData_Bathymetry) aBathymetryObj;
+  if (!inexistWarn.isNull())
+    SUIT_MessageBox::warning( module()->getApp()->desktop(), 
+    tr( "BATHEMETRY_IMPORT_WARNING" ), "Can't read the next files:" + inexistWarn );
+
+  aFileNames = DummyFileList;
+
+  bool isFuseIntoOneOption = aPanel->isFuseIntoOneOptionChecked(); 
+  bool anIsInvertAltitudes = aPanel->isInvertAltitudes();
+
+  QString replacemWarn;
+  QString UnreadFilesWarn;
+
   if ( myIsEdit )
   {
-    aBathymetryObj = myEditedObject;
-  }
-  else
-  {
-    aBathymetryObj = 
-      Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) );
-  }
-  if ( aBathymetryObj.IsNull() )
-    return false;
+    //edit already existing bath
+    if (myEditedObject.IsNull())
+      return false;
+    QStringList anOldFileNames = myEditedObject->GetFilePaths(); 
+    bool anIsInvertAltitudes = aPanel->isInvertAltitudes();
+    myEditedObject->SetAltitudesInverted( anIsInvertAltitudes, false );
+    if ( aFileNames.toSet() != anOldFileNames.toSet() )
+    {
+      myEditedObject->SetAltitudesInverted( anIsInvertAltitudes, false );
+      if ( !myEditedObject->ImportFromFiles( aFileNames ) )
+      {
+        theErrorMsg = tr( "BAD_IMPORTED_BATHYMETRY_FILE" ).arg( aFileNames.join("\n") );
+        return false;
+      }
+    }
+    else if ( anIsInvertAltitudes != myEditedObject->IsAltitudesInverted() )
+      myEditedObject->SetAltitudesInverted( anIsInvertAltitudes );
 
-  QString anOldFileName = HYDROGUI_Tool::ToQString( aBathymetryObj->GetFilePath() );
-  if ( aFileName != anOldFileName )
-  {
-    aBathymetryObj->SetAltitudesInverted( anIsInvertAltitudes, false );
-    if ( !aBathymetryObj->ImportFromFile( HYDROGUI_Tool::ToAsciiString( aFileName ) ) )
+    QString aNewObjName;
+    if (CheckNameExistingBathy(anObjectName, aNewObjName))
     {
-      theErrorMsg = tr( "BAD_IMPORTED_BATHYMETRY_FILE" ).arg( aFileName );
-      return false;
+      myEditedObject->SetName( aNewObjName );
+      replacemWarn += "\n'" + anObjectName + "' => '" + aNewObjName + "'";
     }
+    else
+      myEditedObject->SetName( anObjectName );
+    myEditedObject->Update();
   }
-  else if ( anIsInvertAltitudes != aBathymetryObj->IsAltitudesInverted() )
+  else
   {
-    aBathymetryObj->SetAltitudesInverted( anIsInvertAltitudes );
+    //create the new one
+    if (isFuseIntoOneOption)
+    {
+      Handle(HYDROData_Bathymetry) aBathymetryObj = Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) );
+      if ( aBathymetryObj.IsNull() )
+        return false;
+      aBathymetryObj->SetAltitudesInverted( anIsInvertAltitudes, false );
+      if ( !aBathymetryObj->ImportFromFiles( aFileNames ) )
+      {
+        theErrorMsg = tr( "BAD_IMPORTED_BATHYMETRY_FILE" ).arg( aFileNames.join("\n") );
+        return false;
+      }
+
+      QString aNewObjName;
+      if (CheckNameExistingBathy(anObjectName, aNewObjName))
+      {
+        aBathymetryObj->SetName( aNewObjName );
+        replacemWarn += "\n'" + anObjectName + "' => '" + aNewObjName + "'";
+      }
+      else
+        aBathymetryObj->SetName( anObjectName );
+
+      aBathymetryObj->SetName( anObjectName );
+      aBathymetryObj->Update();
+      QString anEntry = HYDROGUI_DataObject::dataObjectEntry( aBathymetryObj );
+      theBrowseObjectsEntries.append( anEntry );
+    }
+    else //myedit off + non-fuse => import separate files
+    {
+      bool AtLeastOneWasImported = false;
+      foreach (QString filename, aFileNames)
+      {
+        Handle(HYDROData_Bathymetry) aBathymetryObj = Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) );
+        if ( aBathymetryObj.IsNull() )
+          continue;
+        aBathymetryObj->SetAltitudesInverted( anIsInvertAltitudes, false );
+        if ( !aBathymetryObj->ImportFromFiles( QStringList(filename) ) )
+        {
+          UnreadFilesWarn += "\n" + filename;
+          continue;
+        }
+
+        QString anObjectName = QFileInfo( filename ).baseName();
+        QString aNewObjName;
+        if (CheckNameExistingBathy(anObjectName, aNewObjName))
+        {
+          aBathymetryObj->SetName( aNewObjName );
+          replacemWarn += "\n'" + anObjectName + "' => '" + aNewObjName + "'";
+        }
+        else
+          aBathymetryObj->SetName( anObjectName );
+
+        AtLeastOneWasImported = true;
+        aBathymetryObj->Update();
+        QString anEntry = HYDROGUI_DataObject::dataObjectEntry( aBathymetryObj );
+        theBrowseObjectsEntries.append( anEntry );
+      }
+      if (!AtLeastOneWasImported)
+      {
+        theErrorMsg = tr( "BAD_IMPORTED_BATHYMETRY_FILES" ).arg( aFileNames.join("\n") ); 
+        return false;
+      }
+    }
   }
 
-  aBathymetryObj->SetName( anObjectName );
+  if (!UnreadFilesWarn.isNull())
+    SUIT_MessageBox::warning( module()->getApp()->desktop(), 
+    tr( "BATHEMETRY_IMPORT_WARNING" ), "The next files cannot be imported:" + UnreadFilesWarn );
 
-  aBathymetryObj->Update();
+
+  if (!replacemWarn.isNull())
+    SUIT_MessageBox::warning( module()->getApp()->desktop(), 
+    tr( "BATHEMETRY_IMPORT_WARNING" ), "The next objects names are already exist in the document; so the new objects was renamed:" + replacemWarn );
 
   // Activate VTK viewer and show the bathymetry
   SUIT_ViewManager* aVTKMgr = 0;
@@ -185,30 +279,12 @@ bool HYDROGUI_ImportBathymetryOp::processApply( int& theUpdateFlags,
     }
   }
 
-  /*
-  // If there is no VTK viewer yet then create a new one
-  if ( !aVTKMgr )
-  {
-    aVTKMgr = module()->getApp()->createViewManager( SVTK_Viewer::Type() );
-  }
-  // Set the bathymetry visible in the VTK viewer
-  if ( aVTKMgr )
-  {
-    module()->setObjectVisible( (size_t)aVTKMgr->getViewModel(), aBathymetryObj, true );
-  }*/
-
   theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced |
-                              UF_VTKViewer | UF_VTK_Forced;
-
-  if( !myIsEdit )
-  {
-    QString anEntry = HYDROGUI_DataObject::dataObjectEntry( aBathymetryObj );
-    theBrowseObjectsEntries.append( anEntry );
-  }
+    UF_VTKViewer | UF_VTK_Forced;
 
   return true;
 }
-
 void HYDROGUI_ImportBathymetryOp::onFileSelected()
 {
   HYDROGUI_ImportBathymetryDlg* aPanel = 
@@ -216,11 +292,17 @@ void HYDROGUI_ImportBathymetryOp::onFileSelected()
   if ( !aPanel )
     return;
 
+  QStringList aFileNames = aPanel->getFileNames();
+  if ( !aPanel->isFuseIntoOneOptionEnabled() )
+    aPanel->setFuseIntoOneOptionEnabled( !myIsEdit && aFileNames.count() > 1 );
+
   QString anObjectName = aPanel->getObjectName().simplified();
-  //if ( anObjectName.isEmpty() )
+  if ( anObjectName.isEmpty() )
   {
-    anObjectName = aPanel->getFileName();
-    if ( !anObjectName.isEmpty() ) {
+    if (aFileNames.count() == 1)
+    {
+      anObjectName = aFileNames[0];
+      if ( !anObjectName.isEmpty() )
         anObjectName = QFileInfo( anObjectName ).baseName();
     }
 
@@ -231,5 +313,16 @@ void HYDROGUI_ImportBathymetryOp::onFileSelected()
   }
 }
 
+bool HYDROGUI_ImportBathymetryOp::CheckNameExistingBathy(const QString& InpName, QString& OutputName)
+{
+  Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), InpName );
+  if (anObject.IsNull())
+    return false;
+  else
+  {
+    OutputName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_BATHYMETRY_NAME" ) );
+    return true;
+  }
+}
 
 
index fe214c34b0f7f3005b5cd2aa11107a282308a9a8..57a7e95daa87fdf8ca8bdcc0494833f2a3cc2519 100644 (file)
@@ -42,6 +42,8 @@ protected:
   virtual bool                    processApply( int& theUpdateFlags, QString& theErrorMsg,
                                                 QStringList& theBrowseObjectsEntries );
 
+  bool                            CheckNameExistingBathy(const QString& InpName, QString& OutputName);
+
 
 protected slots:
   void                            onFileSelected();
index 7b3a26b111073181d23f8d2c81992c002a3d20fa..52583d87373be8be87c1c9f2d45fc0068c6e4c2d 100644 (file)
@@ -141,9 +141,14 @@ does not exist or you have not enough permissions to open it.</translation>
       <translation>The object name must not be an empty string value.</translation>
     </message>
     <message>
-      <source>INCORRECT_FILE_NAME</source>
-      <translation>The file name must not be an empty string value.</translation>
+      <source>EMPTY_FILENAMES</source>
+      <translation>Files list is empty</translation>
     </message>
+    <message>
+      <source>BATHEMETRY_IMPORT_WARNING</source>
+      <translation>Imort of bahemetry - warning</translation>
+    </message>
+
     <message>
       <source>INSUFFICIENT_INPUT_DATA</source>
       <translation>Insufficient input data</translation>
@@ -619,7 +624,13 @@ Do you want to continue?</translation>
       <translation>'%1'
 file cannot be correctly imported for a Bathymetry definition.</translation>
     </message>
-  </context>
+  <message>
+      <source>BAD_IMPORTED_BATHYMETRY_FILES</source>
+      <translation>'%1'
+All files cannot be correctly imported for a Bathymetry definition.</translation>
+    </message>
+    
+</context>
   
   <context>
     <name>HYDROGUI_ImportImageDlg</name>
index 9f316d7c4bb71fca3b90125e619bc4eaf31e17d3..2e6fd5ccba46a681c024c7d11198f9f828dc5edf 100644 (file)
@@ -59,7 +59,7 @@ public:
   void SetAltitudesInverted( const bool theIsInverted, const bool theIsUpdate = true );
   bool IsAltitudesInverted() const;
 
-  bool ImportFromFile( const TCollection_AsciiString& theFileName );
+  bool ImportFromFiles( const QStringList& theFileNames );
 
 protected:
   HYDROData_Bathymetry();
index cbca3857558b5e3cdb4e85a8e01ff02c4dc45ab6..01b1ae04f7d8ef86a4e7cb3120f2f5bd5ea94729 100644 (file)
@@ -426,6 +426,28 @@ public:
     sipRes = new NCollection_Sequence<double>( aRes );
   %End
 
+  std::vector<double> GetStricklerCoefficientForPoints( const NCollection_Sequence<double>& theCoordsX,
+                                                        const NCollection_Sequence<double>& theCoordsY,
+                                                        double DefValue,
+                                                        bool UseMax ) const
+  [std::vector<double> ( const NCollection_Sequence<gp_XY>&, double, bool)];
+  %MethodCode
+  std::vector<gp_XY> aPnts;
+  int aLen = qMin( a0->Length(), a1->Length() );
+  for ( int i = 1; i <= aLen; ++i )
+  {
+    gp_XY aPnt( a0->Value( i ), a1->Value( i ) );
+    aPnts.push_back( aPnt );
+  }
+  std::vector<double> aRes;
+  Py_BEGIN_ALLOW_THREADS
+  aRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetStricklerCoefficientForPoints( aPnts, a2, a3 ) : 
+                         sipCpp->GetStricklerCoefficientForPoints( aPnts, a2, a3 );
+  Py_END_ALLOW_THREADS
+  sipRes = new std::vector<double>( aRes );
+  %End
+
+
   /**
    * Returns altitudes for given points on given zone.
    * \param thePoints the points to examine
index 47a3e94279e3af65b92317c82677a396f05984a0..f220d40163d9a1d2a3d6c95832d1a473caabd2c3 100644 (file)
@@ -19,6 +19,8 @@ set(PROJECT_HEADERS
   test_HYDROGUI_ListModel.h
   test_HYDROGUI_Shape.h
   test_HYDROGUI_LandCoverMapDlg.h
+  test_HYDROData_CalcCase.h
+
   test_Dependencies.h
   test_HYDROData_DTM.h
 
@@ -46,6 +48,7 @@ set(PROJECT_SOURCES
   test_HYDROGUI_ListModel.cxx
   test_HYDROGUI_Shape.cxx
   test_HYDROGUI_LandCoverMapDlg.cxx
+  test_HYDROData_CalcCase.cxx
   test_Dependencies.cxx
 
   TestShape.cxx
index 904dbc93d0029bd309b6787d226403a825f5914e..fce3baadf3643f100b23246b8d3b323bc88395bd 100644 (file)
@@ -268,7 +268,7 @@ bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, cons
   if( theCase )
     myKey = theCase;
 
-  QString anExpectedRefFilePath = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test/HYDRO";
+  QString anExpectedRefFilePath = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test";
   anExpectedRefFilePath += "/" + myKey + ".png";
   QImage anExpectedRefImage; 
   anExpectedRefImage.load( anExpectedRefFilePath );
@@ -293,6 +293,8 @@ bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, cons
   QString aDiffFilePath = QDir::tempPath() + "/" + myKey + "_diff.png";
   aDiff.save( aDiffFilePath );
 
+  anExpectedRefImage.save( QDir::tempPath() + "/" + myKey + "_1.png");
+
   return false;
 }
 
index db50aef88b24ee5a2f424dda318c50f8f7331245..d58c9fb86e721631ada2a57161a8be55b1f98a31 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/CLC06-cut_1_res.png and b/src/HYDRO_tests/reference_data/CLC06-cut_1_res.png differ
index e1b18f953afe331d47fcf89ecc3535946297d703..891597b4d13a802e73d92a90135d2873834b8df5 100644 (file)
@@ -102,6 +102,14 @@ SET(REFERENCE_DATA
     t1.dbf
     test_LCM.dbf
     test.telemac
+    r2.brep
+    p1.brep
+    p2.brep
+    p3.brep
+    cc_int_w_1.png 
+    cc_int_w_2.png
+    cc_int_w_3.png
+    
 )
 
 # Application tests
index 4f8b7d18a3eb1be0a5afbffb8e006430c533f5cc..de597b4034db3a4cce239a9eac55dfaace89f6f4 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/Channel.png and b/src/HYDRO_tests/reference_data/Channel.png differ
index 67cc84e4ce6d01847ed00c0f7bdeb654ff6dbef7..09ce9a9eb97971885e11b01d9cb174d3f96356c1 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/Extraction_Channel.png and b/src/HYDRO_tests/reference_data/Extraction_Channel.png differ
index d0e58c019cdf43de4c272c694c9ae1cfe1ec7024..9e9197879742bc966e5eecd8dff67ea01321a589 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/Extraction_ImmZone.png and b/src/HYDRO_tests/reference_data/Extraction_ImmZone.png differ
index 4494edf5323d1fda95e4906508c5aff64ce55e0b..f02db52fcf895856b4eb356494849eb9d7945d0c 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LCM_copied.png and b/src/HYDRO_tests/reference_data/LCM_copied.png differ
index b725e864cd331c96daf131ae9519c708f4962372..4a7e44191640b24ea86717f2cf03462b75233e1f 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LCM_split_2a.png and b/src/HYDRO_tests/reference_data/LCM_split_2a.png differ
index bdcd3ad9818de3cb21dc8738ed8023cd17c826ae..e85c19ac6159d8f3b9eff48a9c25354de111925f 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LCM_split_2b.png and b/src/HYDRO_tests/reference_data/LCM_split_2b.png differ
index 462d62c4bf041fe87e1aec60d4a01abf3a280a67..fa0e260c51c13145958388f9a5825811eeb4dc75 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCoverMap_Add_2_Objects.png and b/src/HYDRO_tests/reference_data/LandCoverMap_Add_2_Objects.png differ
index 565bbef1639e06072506a60e2d1ae0257ff323f2..7288a5f8f087f22148c6ff200d15d7a748bbf5e2 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCoverMap_Merge_1.png and b/src/HYDRO_tests/reference_data/LandCoverMap_Merge_1.png differ
index 6028686ba465e8bac6bdd65cea7bd6d4eea3dae1..4f6daf9ad7e2fa1d77e732dc604d2a3f6ad46353 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCoverMap_Merge_2.png and b/src/HYDRO_tests/reference_data/LandCoverMap_Merge_2.png differ
index 434e98eae40032093499933623c0c023ec36f601..03b73fbeba3e84ffaa2d6aa1752a6c7830a5b74a 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCoverMap_PrsByCoeff.png and b/src/HYDRO_tests/reference_data/LandCoverMap_PrsByCoeff.png differ
index 28b79a469d273987eefa91f97aca4c47422b1a9b..f940570fcc50c2393663ffd1b1caf281bdeb2075 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCoverMap_PrsByTypes.png and b/src/HYDRO_tests/reference_data/LandCoverMap_PrsByTypes.png differ
index ee5f9f9430c540a8197ddc0ad5de7b6ef211164d..dce48726dc041ddbabd7586cb1d7f1b0602172fe 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCoverMap_Remove_1.png and b/src/HYDRO_tests/reference_data/LandCoverMap_Remove_1.png differ
index 95b07befe66494782dcb3dbc3686cdb7dc12ef24..877688be257276cdc849f907a43d63a56ddb4c0c 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCoverMap_Split_1.png and b/src/HYDRO_tests/reference_data/LandCoverMap_Split_1.png differ
index f955b1373f64f3838ab062bb12224fa00d212a93..b34f64775e94f1ce3770d6e7cc7bc174d2153806 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCoverMap_Split_2.png and b/src/HYDRO_tests/reference_data/LandCoverMap_Split_2.png differ
index a5b80362276c0365ab080416bd43d68672d5ce5a..98c5e924fc372473b77e5369631f12e84364d8e0 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCoverMap_Split_Polyline.png and b/src/HYDRO_tests/reference_data/LandCoverMap_Split_Polyline.png differ
index 69335a2e5e4d8d77303908a2bf77f8d08bdac7b4..e9ac5eec258b9dce23e5336e3754e49f539665c4 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCoverMap_TransparentPrs.png and b/src/HYDRO_tests/reference_data/LandCoverMap_TransparentPrs.png differ
index a8fa3c1f3426861b33b3dfda980cb18c02278cf2..b015ee5df1408d44e86d53dff421b141f47cb23a 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCover_Triangles.png and b/src/HYDRO_tests/reference_data/LandCover_Triangles.png differ
index bb59e2324f738a2931ea5af0f20a68f8a6653811..175785ebf5862224cf0e8f97e8c449a9ecf55bff 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/LandCover_Triangles_Split.png and b/src/HYDRO_tests/reference_data/LandCover_Triangles_Split.png differ
index baed02ce05628644575faf7c3497291ec15c0e3f..46e68bed7cd2cd138acb0825ebcabb9563d6ba05 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/Merge_Polylines.png and b/src/HYDRO_tests/reference_data/Merge_Polylines.png differ
index 519f94a141b7ec9ab97bf85ca94c45c8930ec554..34154fd5da59d9a0940a3e06efb7ca85418246d0 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/NLD_water_areas_dcw.png and b/src/HYDRO_tests/reference_data/NLD_water_areas_dcw.png differ
index 938f6f62323d87693a75ccb47e6e20f14a67958e..1a4f14fdff8e0e089bbb72736205a6e533a3f08b 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/Polyline_Presentation.png and b/src/HYDRO_tests/reference_data/Polyline_Presentation.png differ
index 9aba0e4a43f6439b503c87a0cb4ec54a2985b00a..fd1d1233d2898dada0cdce6f6fb6df15143a1209 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/Shape_preview_im_zone.png and b/src/HYDRO_tests/reference_data/Shape_preview_im_zone.png differ
index 67aca119b82907b651c0bcc8046327f895f8ed64..1915908fe69d167401f085ac2e5d2e5dd886fb3c 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/Split_Polylines_Colors.png and b/src/HYDRO_tests/reference_data/Split_Polylines_Colors.png differ
index 8e109a55912cd0f7919ac5a822300f2f9f36b23d..c93ac4692de956e0ac5eabd0ffc8b05d0dfe049e 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/Split_Straight.png and b/src/HYDRO_tests/reference_data/Split_Straight.png differ
diff --git a/src/HYDRO_tests/reference_data/cc_int_w_1.png b/src/HYDRO_tests/reference_data/cc_int_w_1.png
new file mode 100644 (file)
index 0000000..4762944
Binary files /dev/null and b/src/HYDRO_tests/reference_data/cc_int_w_1.png differ
diff --git a/src/HYDRO_tests/reference_data/cc_int_w_2.png b/src/HYDRO_tests/reference_data/cc_int_w_2.png
new file mode 100644 (file)
index 0000000..70ef70e
Binary files /dev/null and b/src/HYDRO_tests/reference_data/cc_int_w_2.png differ
diff --git a/src/HYDRO_tests/reference_data/cc_int_w_3.png b/src/HYDRO_tests/reference_data/cc_int_w_3.png
new file mode 100644 (file)
index 0000000..cdeffb4
Binary files /dev/null and b/src/HYDRO_tests/reference_data/cc_int_w_3.png differ
index 2e143f826e46e6dd6d4acc1a1ddd35f200a3db12..cca57191e7c3397f9d5acb687ad555a117df04ff 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/clc_dec_150_350.png and b/src/HYDRO_tests/reference_data/clc_dec_150_350.png differ
index 4edc22e933a8f9f09d4f40fbfc64c95bbe07dd1c..edd084aad0747b8d207a47cd11c314ef6646a94b 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/cyprus_natural_all.png and b/src/HYDRO_tests/reference_data/cyprus_natural_all.png differ
index a98e002e4ad188c0ad62c77f78713bfc78fede90..7b7d7fcb8545b2bf513aae6f44519a569fb09bf3 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/lcm_poly_2_sections.png and b/src/HYDRO_tests/reference_data/lcm_poly_2_sections.png differ
index 1ae7be537e4f84ae055f7b87be83422c8837025a..437fd5042b8ef35589b556f5bba861c8f0bc3f61 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_boxes_11.png and b/src/HYDRO_tests/reference_data/merge_faces_boxes_11.png differ
index e2d0747fde28bfe979de356e0cd1aa6790403ee0..ee6ecb05f870581cc94fcc2889fb3ca2cc018bfb 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_boxes_12.png and b/src/HYDRO_tests/reference_data/merge_faces_boxes_12.png differ
index b7d0a3f101abac052b5e0a662a4b8b459781839b..341f77fa34cf651ed95ad9e5b789d7a82cc50798 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_boxes_13.png and b/src/HYDRO_tests/reference_data/merge_faces_boxes_13.png differ
index 99d05dfc9e376fab4c8a958d2cbe8b58467bdb40..96d4902ec02016f230753193085d55814d140c89 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_boxes_14.png and b/src/HYDRO_tests/reference_data/merge_faces_boxes_14.png differ
index 8c8d74d22064b707068eadaf3c874271d5619471..20a858ea420663b2b9a11dcbac2d89235c914036 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_boxes_21.png and b/src/HYDRO_tests/reference_data/merge_faces_boxes_21.png differ
index e2d0747fde28bfe979de356e0cd1aa6790403ee0..ee6ecb05f870581cc94fcc2889fb3ca2cc018bfb 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_boxes_22.png and b/src/HYDRO_tests/reference_data/merge_faces_boxes_22.png differ
index 09788d1eca0c5bbee1f7e5cf79d8789fa85876c6..10a0acda2476bc275f11ea036ea3b4708211334c 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_boxes_23.png and b/src/HYDRO_tests/reference_data/merge_faces_boxes_23.png differ
index a2889ae76642e6cbe875d7139ef72c712697675a..21de11a33a9ae96201359b10f629d0d94dc43164 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_boxes_24.png and b/src/HYDRO_tests/reference_data/merge_faces_boxes_24.png differ
index 81257c872fd82a1af69582f82463fc1107d1b04d..2ac1f68b9e07535e6716290a1acad7290fdcc22a 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_circles_11.png and b/src/HYDRO_tests/reference_data/merge_faces_circles_11.png differ
index dd7a7c2057796c27bd4e2f5f7f4d21974af3f592..9fcbd304a707560945e0263d600d807e500189b1 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_circles_12.png and b/src/HYDRO_tests/reference_data/merge_faces_circles_12.png differ
index 417ef34b4290b0b53a15561ff754c4720ca545c9..e9c116f90fa6cf7fa35d3176c7f6fc2d3b8125a4 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_circles_13.png and b/src/HYDRO_tests/reference_data/merge_faces_circles_13.png differ
index 417ef34b4290b0b53a15561ff754c4720ca545c9..e9c116f90fa6cf7fa35d3176c7f6fc2d3b8125a4 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_circles_14.png and b/src/HYDRO_tests/reference_data/merge_faces_circles_14.png differ
index 86a8172c2281f45614483a1d6f7dc7cdf21d721d..d1be8809ddafca84115c79549535cd6724ebc2b2 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_circles_21.png and b/src/HYDRO_tests/reference_data/merge_faces_circles_21.png differ
index dd7a7c2057796c27bd4e2f5f7f4d21974af3f592..9fcbd304a707560945e0263d600d807e500189b1 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_circles_22.png and b/src/HYDRO_tests/reference_data/merge_faces_circles_22.png differ
index f9d0686d2a3c02e611a75e8acac5c3a9c5a7d7f0..d0f68c449264b6b439be47857a68ca56ffe03b8b 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_circles_23.png and b/src/HYDRO_tests/reference_data/merge_faces_circles_23.png differ
index f9d0686d2a3c02e611a75e8acac5c3a9c5a7d7f0..d0f68c449264b6b439be47857a68ca56ffe03b8b 100644 (file)
Binary files a/src/HYDRO_tests/reference_data/merge_faces_circles_24.png and b/src/HYDRO_tests/reference_data/merge_faces_circles_24.png differ
diff --git a/src/HYDRO_tests/reference_data/p1.brep b/src/HYDRO_tests/reference_data/p1.brep
new file mode 100644 (file)
index 0000000..cbd0f8a
--- /dev/null
@@ -0,0 +1,42 @@
+DBRep_DrawableShape
+
+CASCADE Topology V1, (c) Matra-Datavision
+Locations 0
+Curve2ds 0
+Curves 1
+1 89031.267742040858 37460.250754226363 0 0.97739578940238125 0.21141776381963695 0 
+Polygon3D 0
+PolygonOnTriangulations 0
+Surfaces 0
+Triangulations 0
+
+TShapes 4
+Ve
+1e-007
+89031.2677420409 37460.2507542264 0
+0 0
+
+0101101
+*
+Ve
+1e-007
+89601 37583.4879537925 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  1 0 0 582.908443167633
+0
+
+0101000
++4 0 -3 0 *
+Wi
+
+1101000
++2 0 *
+
++1 0 
+0
+
diff --git a/src/HYDRO_tests/reference_data/p2.brep b/src/HYDRO_tests/reference_data/p2.brep
new file mode 100644 (file)
index 0000000..92568f4
--- /dev/null
@@ -0,0 +1,42 @@
+DBRep_DrawableShape
+
+CASCADE Topology V1, (c) Matra-Datavision
+Locations 0
+Curve2ds 0
+Curves 1
+1 89401 37503 0 -0.9685594775963311 -0.24878211020554142 0 
+Polygon3D 0
+PolygonOnTriangulations 0
+Surfaces 0
+Triangulations 0
+
+TShapes 4
+Ve
+1e-007
+89401 37503 0
+0 0
+
+0101101
+*
+Ve
+1e-007
+89000 37400 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  1 0 0 414.0169078673
+0
+
+0101000
++4 0 -3 0 *
+Wi
+
+1101000
++2 0 *
+
++1 0 
+0
+
diff --git a/src/HYDRO_tests/reference_data/p3.brep b/src/HYDRO_tests/reference_data/p3.brep
new file mode 100644 (file)
index 0000000..c2bb851
--- /dev/null
@@ -0,0 +1,42 @@
+DBRep_DrawableShape
+
+CASCADE Topology V1, (c) Matra-Datavision
+Locations 0
+Curve2ds 0
+Curves 1
+1 89401 37503 0 0.70710678118654746 0.70710678118654746 0 
+Polygon3D 0
+PolygonOnTriangulations 0
+Surfaces 0
+Triangulations 0
+
+TShapes 4
+Ve
+1e-007
+89401 37503 0
+0 0
+
+0101101
+*
+Ve
+1e-007
+89421 37523 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  1 0 0 28.2842712474619
+0
+
+0101000
++4 0 -3 0 *
+Wi
+
+1101000
++2 0 *
+
++1 0 
+0
+
diff --git a/src/HYDRO_tests/reference_data/r2.brep b/src/HYDRO_tests/reference_data/r2.brep
new file mode 100644 (file)
index 0000000..28a3649
--- /dev/null
@@ -0,0 +1,1190 @@
+DBRep_DrawableShape
+
+CASCADE Topology V1, (c) Matra-Datavision
+Locations 7
+1
+              1               0               0 89318.1771346115 
+              0               1               0 37523.2269884235 
+              0               0               1               0 
+1
+              1               0               0 -89318.1771346115 
+              0               1               0 -37523.2269884235 
+              0               0               1              -0 
+2  2 -1 0
+1
+              1               0               0 -89318.1771346115 
+              0               1               0 -37523.2269884235 
+              0               0               1              -0 
+2  4 -1 0
+1
+              1               0               0 -89318.1771346115 
+              0               1               0 -37523.2269884235 
+              0               0               1              -0 
+2  6 -1 0
+Curve2ds 74
+7 0 0  1 2 2  -25.000000000007276 -16.075344349635998  -24.999999999992724 16.075344349621446 
+ 0 2 32.420343677464707 2
+7 0 0  5 6 2  -25.015749468555441 -3.7778594480332686  -24.995987322803558 -2.2771561305416981  -24.986036661179241 -0.76287640562804881  -24.98604795879146 0.75731200315931346  -24.996027718407277 2.2757567960361484  -25.015842100805457 3.7847976761840982 
+ 3.0443579100651261 6 3.2640453476566313 6
+7 0 0  5 6 2  -25 16.075344349592342  -24.999999999978172 17.576177781258593  -25.009989400117774 19.090457251106272  -25.030017698125448 20.610513719002483  -25.059990634959831 22.128695462961332  -25.099673516437178 23.637344612565357 
+ 3.0443579100651261 6 3.2640453476566313 6
+7 0 0  1 2 2  -25.000000001076842 -20.271189721228438  -24.999999998923158 20.27118972298922 
+ 4.1357864557881516 2 44.839442635187361 2
+7 0 0  1 2 2  -25.099673515505856 23.637344613278401  -26.165714725670114 64.165706128856982 
+ 4.1357864557881516 2 44.839442635187361 2
+7 0 0  5 6 2  -24.926615566866531 -3.3812512257427443  -24.999981777997164 -2.0300028295750963  -25.036677842625068 -0.67681951883423608  -25.036655735835666 0.67697007555398159  -24.999939844368782 2.0300390451739077  -24.926625549953314 3.3810667877696687 
+ 3.0601329938793498 6 3.168632769656555 6
+7 0 0  5 6 2  -26.165714725662838 64.165706128886086  -26.201297446255921 65.518476877798093  -26.200170274125412 66.872157195699401  -26.162322326017602 68.225417628578725  -26.087815053913801 69.576932467432925  -25.976780700890231 70.925384290632792 
+ 3.0601329938793498 6 3.168632769656555 6
+7 0 0  1 2 2  -25.000000009851647 -23.251444535490009  -24.999999990148353 23.251444553825422 
+ 2.0363688587054649 2 48.686194767358877 2
+7 0 0  1 2 2  -25.976780705350393 70.925384290909278  -22.16055080951628 117.27142061589984 
+ 2.0363688587054649 2 48.686194767358877 2
+7 0 0  5 6 2  -24.999706968650571 -1.5207693030679366  -25.000057282137277 -0.91340194822987542  -25.000232424521528 -0.3050903657276649  -25.000232235026488 0.30384726006013807  -25.000056722499721 0.91309150906454306  -24.999706071495893 1.5223229557886953 
+ 4.6329902037804702 6 4.7134544916582994 6
+7 0 0  5 6 2  -22.160550809509004 117.27142061589984  -22.110707587235083 117.87673944066046  -22.060611762834014 118.48298478742072  -22.010289470556017 119.08983954682481  -21.959767115855357 119.69698539207457  -21.909071279704222 120.30410400556866 
+ 4.6329902037804702 6 4.7134544916582994 6
+7 0 0  1 2 2  -25.000000001986336 -22.681891918095062  -24.999999997999112 22.681891921718488 
+ 1.5095198913739187 2 46.873329477009811 2
+7 0 0  1 2 2  -21.909071279747877 120.30410400555411  -18.134225797846739 165.51055737068236 
+ 1.5095198913739187 2 46.873329477009811 2
+7 0 0  5 6 2  -24.967151465003553 -2.326332990109222  -25.000239834713284 -1.3962027643283363  -25.016793643015262 -0.46548328360950109  -25.016798895798274 0.46544281060050707  -25.000249966789852 1.3961927893396933  -24.96714969274035 2.3263829582283506 
+ 6.1730258926905792 6 6.2497173472860759 6
+7 0 0  5 6 2  -18.134225797854015 165.51055737068236  -18.056778139456583 166.43804803767125  -17.962842716864543 167.36416299636767  -17.85245101145847 168.28852064591774  -17.725642823854287 169.21074029085867  -17.58246647244232 170.13044128078036 
+ 6.1730258926905792 6 6.2497173472860759 6
+7 0 0  1 2 2  -24.999999993306119 -22.354008205249556  -25.000000006708433 22.354008193316986 
+ 1.4386699403681846 2 46.166503508015197 2
+7 0 0  1 2 2  -17.582466475236288 170.13044128123147  -10.705290171099477 214.30635300217546 
+ 1.4386699403681846 2 46.166503508015197 2
+7 0 0  5 6 2  -25.012772328176652 -1.5200271449284628  -24.991171838853916 -0.91245035686006304  -24.98032191699167 -0.30315607837110292  -24.980328572935832 0.30600212080753408  -24.991160400481021 0.91316548560280353  -25.012645691989746 1.5164776122255716 
+ 6.1992706349623292 6 6.3277815401364137 6
+7 0 0  5 6 2  -10.705290171092201 214.30635300217546  -10.61177109304117 214.90707782818936  -10.528722950111842 215.51078325680282  -10.456470875637024 216.11564138016547  -10.395204171691148 216.71980284123856  -10.344972550636157 217.32140397500189 
+ 6.1992706349623292 6 6.3277815401364137 6
+7 0 0  1 2 2  -24.999999994448444 -22.373434601599001  -25.000000005558832 22.373434591689147 
+ 2.4129011012208772 2 47.293774521690104 2
+7 0 0  1 2 2  -10.344972546961799 217.3214039751183  -6.6217193098855205 261.91310374012392 
+ 2.4129011012208772 2 47.293774521690104 2
+7 0 0  5 6 2  -25.00295420744078 -0.72195692671812139  -24.997817074108752 -0.43411404147627763  -24.995239315183426 -0.14540764412959106  -24.995237395487493 0.14395069747115485  -24.997819696887746 0.43374939476780128  -25.002986683342897 0.72377711183798965 
+ 3.162984811269054 6 3.2254023613222773 6
+7 0 0  5 6 2  -6.6217193098855205 261.91310374012392  -6.5977649497144739 262.19999414663471  -6.576307999137498 262.48791362839984  -6.5573787266694126 262.7766521476733  -6.5409993365392438 263.06599911725789  -6.5271841155336006 263.3557436842384 
+ 3.162984811269054 6 3.2254023613222773 6
+7 0 0  1 2 2  -24.999999999345164 -18.393725742600509  -25.000000000654836 18.393725741640083 
+ 1.1707091734476303 2 37.970627312103517 2
+7 0 0  1 2 2  -6.5271841155336006 263.3557436842384  -4.7751235096075106 300.10144915220735 
+ 1.1707091734476303 2 37.970627312103517 2
+7 0 0  5 6 2  -25.001019058807287 -0.61301551254291553  -24.990394303924404 -0.36822476107045077  -24.985069059490343 -0.12294239498442039  -24.985066459776135 0.1225924914033385  -24.990392933417752 0.36813759962387849  -25.001038008340402 0.61345198439084925 
+ 6.2000958873176266 6 6.290650569642092 6
+7 0 0  5 6 2  -4.7751235096002347 300.1014491521928  -4.7634539862629026 300.346192322977  -4.7570818266976858 300.59144972435024  -4.7560311855049804 300.8369823628891  -4.7603095254889922 301.08254796981055  -4.7699074031261262 301.32790555730753 
+ 6.2000958873176266 6 6.290650569642092 6
+7 0 0  1 2 2  -24.999999995809048 -18.911991958171711  -25.000000004183676 18.911991951841628 
+ 1.6990614677072315 2 39.523045377700264 2
+7 0 0  1 2 2  -4.7699074004194699 301.32790555738029  -6.2483720993404859 339.12298329191981 
+ 1.6990614677072315 2 39.523045377700264 2
+1 -31.03125 -21.42578125 0.51445130432288266 0.85751959480847129 
+1 -3.6168271508652481 334.07238175608336 -0.83204493284837588 0.55470823837522165 
+1 -33.984375 -39.16015625 0.16425805207772101 0.9864174026889595 
+1 13.95677581286599 330.27798025131517 -0.97747497678214024 0.21105134390653499 
+1 -30.296875 -53.93359375 -0.24217343450463402 0.97023297594970959 
+1 28.889071594325497 333.25768736971003 -0.98066585882985935 -0.19568973740463366 
+1 -23.640625 -62.80078125 -0.60033816506334725 0.79974626449166564 
+1 38.063211144520579 339.484070086521 -0.82743077612757954 -0.56156772585050807 
+1 -8.8671875 -68.7109375 -0.92845975927333024 0.37143300258607842 
+1 44.670268955910672 353.95926229743031 -0.41523086993587066 -0.90971606815110184 
+7 0 0  1 2 2  24.999999993360689 -11.955651295284042  25.000000006642949 11.955651288924855 
+ 0.29070807495669032 2 24.202010659164024 2
+7 0 0  1 2 2  43.707342632485961 341.27108873605903  43.143235001261928 365.17573627275124 
+ 0.29070807495669032 2 24.202010659164024 2
+7 0 0  4 5 2  24.999999999257852 -0.09689978499955032  24.999624412706908 -0.048450850663357414  24.99949921235384 -1.9063008949160576e-009  24.999624412754201 0.048450849499204196  24.999999999345164 0.09689978814276401 
+ 0.071238468338566924 5 0.086742588425107264 5
+7 0 0  4 5 2  43.713416463950125 341.07738436566433  43.711522634075664 341.125797728615  43.709879007394193 341.17422085236467  43.708485658382415 341.22265182647971  43.707342632493237 341.27108873610268 
+ 0.071238468338566924 5 0.086742588425107264 5
+7 0 0  1 2 2  25.000000004187314 -18.911991951841628  24.999999995816324 18.911991958171711 
+ 1.6990614677072315 2 39.523045377700264 2
+7 0 0  1 2 2  45.191881162871141 303.28230663113936  43.713416463942849 341.07738436566433 
+ 1.6990614677072315 2 39.523045377700264 2
+7 0 0  5 6 2  24.951950965260039 -2.7811450689769117  25.000206541692023 -1.6693529439653503  25.024339916075405 -0.55654572838102467  25.024333981353266 0.55658866016892716  25.000195168358914 1.6693634410912637  24.951953250958468 2.7810922330536414 
+ 6.2000958873176266 6 6.290650569642092 6
+7 0 0  5 6 2  45.168137011824001 297.72012000893301  45.221137723965512 298.831696031717  45.250020786595996 299.94439009904454  45.254766156554979 301.05751437264553  45.235377333134238 302.17038205071003  45.191881160164485 303.28230663108116 
+ 6.2000958873176266 6 6.290650569642092 6
+7 0 0  1 2 2  25.000000000654836 -18.393725741640083  24.999999999345164 18.393725742600509 
+ 1.1707091734476303 2 37.970627312103517 2
+7 0 0  1 2 2  43.416076405890635 260.97441454096406  45.168137011824001 297.72012000893301 
+ 1.1707091734476303 2 37.970627312103517 2
+7 0 0  5 6 2  24.989084804932645 -1.6141650779609336  25.000604622829997 -0.96868881123373285  25.006354355347867 -0.32300137873971835  25.006345059446176 0.32280577256460674  25.000585118883464 0.96864052099408582  24.989080411112809 1.6144103825790808 
+ 3.162984811269054 6 3.2254023613222773 6
+7 0 0  5 6 2  43.204894896589394 257.75275318778586  43.258611600191216 258.39609355872381  43.306584388425108 259.04002207299345  43.348818312908406 259.68444675624778  43.385315713610908 260.32927513569302  43.416076405890635 260.97441454097861 
+ 3.162984811269054 6 3.2254023613222773 6
+7 0 0  1 2 2  25.000000005551556 -22.373434591660043  24.999999994448444 22.373434601613553 
+ 2.4129011012208772 2 47.293774521690104 2
+7 0 0  1 2 2  39.481641659520392 213.16105342276569  43.20489489659667 257.7527531877713 
+ 2.4129011012208772 2 47.293774521690104 2
+7 0 0  5 6 2  24.955659212108003 -3.2964981986297062  25.002517148801417 -1.9784820100030629  25.025958189733501 -0.65943168569356203  25.025994101561082 0.65985624228778761  25.002593439909106 1.9785828435851727  24.955678657221142 3.2959611699479865 
+ 6.1992706349623292 6 6.3277815401364137 6
+7 0 0  5 6 2  38.699621161475079 206.61514137974882  38.902492076391354 207.91829360861448  39.082234096567845 209.22525039696484  39.23876442056644 210.53521944081876  39.371957056413521 211.84741118052625  39.481641655853309 213.16105342263472 
+ 6.1992706349623292 6 6.3277815401364137 6
+7 0 0  1 2 2  25.000000006701157 -22.35400819327333  24.999999993298843 22.354008205293212 
+ 1.4386699403681846 2 46.166503508015197 2
+7 0 0  1 2 2  31.822444857330993 162.43922965880483  38.699621161467803 206.61514137976337 
+ 1.4386699403681846 2 46.166503508015197 2
+7 0 0  5 6 2  25.001240952995431 -0.54876184937893413  24.993431991169928 -0.32924811841803603  24.989525598124601 -0.10960542116663419  24.989527828300197 0.10998540358559694  24.99343305506045 0.32934290848788805  25.001224072504556 0.54828755681228358 
+ 6.1730258926905792 6 6.2497173472860759 6
+7 0 0  5 6 2  31.692364423113759 161.34991956481826  31.710642320162151 161.56881035138213  31.732810541448998 161.78736639529234  31.758853653351252 162.00540741585428  31.788744551384298 162.22275391333096  31.822444860124961 162.43922965833917 
+ 6.1730258926905792 6 6.2497173472860759 6
+7 0 0  1 2 2  24.999999998013664 -22.681891921718488  25.000000002000888 22.681891918095062 
+ 1.5095198913739187 2 46.873329477009811 2
+7 0 0  1 2 2  27.917518941219896 116.14346619971911  31.692364423128311 161.34991956484737 
+ 1.5095198913739187 2 46.873329477009811 2
+7 0 0  5 6 2  25.000284714660665 -1.4919306323863566  24.999941075700917 -0.89613554361858405  24.999769238696899 -0.29935915273381397  24.999769414236653 0.29806758044287562  24.999941614361887 0.89581282647850458  25.000285646696284 1.4935448136966443 
+ 4.6329902037804702 6 4.7134544916582994 6
+7 0 0  5 6 2  27.670800782616425 113.16820254930644  27.719694334053202 113.76198813898372  27.768840193813958 114.35673747671535  27.818211221499951 114.95212071726564  27.867780006999965 115.54780716526147  27.917518941270828 116.14346619970456 
+ 4.6329902037804702 6 4.7134544916582994 6
+7 0 0  1 2 2  24.999999990148353 -23.25144455381087  25.000000009851647 23.251444535504561 
+ 2.0363688587054649 2 48.686194767358877 2
+7 0 0  1 2 2  23.854570886775036 66.822166224359535  27.670800782609149 113.16820254932099 
+ 2.0363688587054649 2 48.686194767358877 2
+7 0 0  5 6 2  24.999847943945497 -0.67048725539643783  24.985328577371547 -0.4030716346896952  24.97804473197175 -0.13487531189457513  24.978034619016398 0.13384240209416021  24.985322611282754 0.40281515446258709  24.999917834044027 0.67177431093296036 
+ 3.0601329938793498 6 3.168632769656555 6
+7 0 0  5 6 2  23.816997279820498 65.480430653595249  23.809955365650239 65.74814755191619  23.810167961164552 66.016442681881017  23.817666017363081 66.285055766202277  23.832466455431131 66.553719875053503  23.854570891235198 66.822166224053944 
+ 3.0601329938793498 6 3.168632769656555 6
+7 0 0  1 2 2  24.999999998923158 -20.27118972298922  25.000000001076842 20.27118972124299 
+ 4.1357864557881516 2 44.839442635187361 2
+7 0 0  1 2 2  24.883038489992032 24.952069137987564  23.816997279820498 65.480430653580697 
+ 4.1357864557881516 2 44.839442635187361 2
+7 0 0  5 6 2  24.979915801588504 -4.4362318334169686  25.003183596887538 -2.6693155255488819  25.014818422107055 -0.89256589440628886  25.014797551619267 0.88854284751869272  25.003127618256258 2.6683324398763943  24.979848240029241 4.4412634747714037 
+ 3.0443579100651261 6 3.2640453476566313 6
+7 0 0  5 6 2  25.000000000014552 16.075344349606894  25.000000000029104 17.842413852849859  24.988238558726152 19.619162650342332  24.964765033822914 21.400116704957327  24.929660825800966 23.179598335933406  24.883038489075261 24.952069137289072 
+ 3.0443579100651261 6 3.2640453476566313 6
+7 0 0  1 2 2  25 -16.07534434965055  25 16.075344349621446 
+ 0 2 32.420343677464707 2
+7 0 1  3 9 9  0 0  25.718367738547386 39.034081160214555  42.359798484074418 49.68072981837031  71.259510071162367 52.101826874022663  100.95941124598903 45.721963559466531  126.68558085264522 22.253989253025793  145.58084922052512 -14.9888774436331  109.53571874478075 -60.626949509118276  18.016370012730476 -88.256613033467147 
+ 0 2 36.262906006700305 1 57.454088681212156 1 85.572945703489182 1 124.44586692001535 1 160.46619436519291 1 195.55253740483596 1 283.60428771698037 1 373.36099733802803 2
+7 0 1  3 9 9  -14.716470227200961 -138.31529277042702  -52.48137794736553 -110.76705006703796  -62.323370419528231 -93.637440349175876  -63.365325531267601 -64.655215273884068  -55.578197215142566 -35.292868325877805  -30.91160457302097 -10.713591930795815  7.1889163713134172 6.3864838073301655  51.058492435676044 -31.791328450589447  74.298048261311834 -124.52272843912905 
+ 0 2 36.262906006700305 1 57.454088681212156 1 85.572945703489182 1 124.44586692001535 1 160.46619436519291 1 195.55253740483596 1 283.60428771698037 1 373.36099733802803 2
+Curves 38
+7 0 0  1 2 2  89147.57496042877 37547.866161510719 0  89179.689164861818 37549.397388949707 0 
+ 0 2 32.420343677464707 2
+7 0 0  5 6 2  89179.689164861789 37549.397388949714 0  89181.188295163316 37549.468868517462 0  89182.700380483628 37549.550966538365 0  89184.21775812791 37549.643367203775 0  89185.732789546484 37549.74561193624 0  89187.237836736735 37549.857101589711 0 
+ 3.0443579100651261 6 3.2640453476566313 6
+7 0 0  1 2 2  89187.237836737491 37549.857101588816 0  89227.669435191099 37552.852160434006 0 
+ 4.1357864557881516 2 44.839442635187361 2
+7 0 0  5 6 2  89227.669435191128 37552.852160433999 0  89229.018976146501 37552.952130623838 0  89230.371174005457 37553.015475898625 0  89231.724701340951 37553.042122070096 0  89233.078231021616 37553.032067381515 0  89234.430440822573 37552.985381181585 0 
+ 3.0601329938793498 6 3.168632769656555 6
+7 0 0  1 2 2  89234.430440822645 37552.985381186059 0  89280.905638138269 37551.380785246882 0 
+ 2.0363688587054649 2 48.686194767358877 2
+7 0 0  5 6 2  89280.905638138269 37551.380785246874 0  89281.512643915907 37551.359827853325 0  89282.120587194688 37551.338662271381 0  89282.729149980471 37551.317299502793 0  89283.338013050059 37551.295750762234 0  89283.946857181116 37551.274027440129 0 
+ 4.6329902037804702 6 4.7134544916582994 6
+7 0 0  1 2 2  89283.946857181101 37551.27402744018 0  89329.281793725517 37549.656494510076 0 
+ 1.5095198913739187 2 46.873329477009811 2
+7 0 0  5 6 2  89329.281793725517 37549.656494510084 0  89330.211920453075 37549.62330794958 0  89331.141458289363 37549.573586814724 0  89332.070024567205 37549.507344376856 0  89332.997237127565 37549.424602260187 0  89333.922713450753 37549.325390599195 0 
+ 6.1730258926905792 6 6.2497173472860759 6
+7 0 0  1 2 2  89333.922713451073 37549.325390602011 0  89378.376031215143 37544.55996616534 0 
+ 1.4386699403681846 2 46.166503508015197 2
+7 0 0  5 6 2  89378.376031215143 37544.559966165332 0  89378.980528339001 37544.495163682455 0  89379.587503988267 37544.440962208304 0  89380.195116844348 37544.397599450254 0  89380.801510633042 37544.365176417006 0  89381.404821436561 37544.343654004508 0 
+ 6.1992706349623292 6 6.3277815401364137 6
+7 0 0  1 2 2  89381.404821436852 37544.343654000848 0  89426.123244834802 37542.748376155963 0 
+ 2.4129011012208772 2 47.293774521690104 2
+7 0 0  5 6 2  89426.123244834802 37542.748376155963 0  89426.410950545396 37542.738112588668 0  89426.699565220377 37542.73039260826 0  89426.988877618744 37542.725236445542 0  89427.278676334798 37542.72265625 0  89427.568750074424 37542.722656249985 0 
+ 3.162984811269054 6 3.2254023613222773 6
+7 0 0  1 2 2  89427.568750074424 37542.722656249985 0  89464.356201558665 37542.722656249985 0 
+ 1.1707091734476303 2 37.970627312103517 2
+7 0 0  5 6 2  89464.35620155865 37542.722656249978 0  89464.601222776968 37542.72265625 0  89464.846505346984 37542.727972093438 0  89465.091809396094 37542.73861652505 0  89465.336892575011 37542.754585460738 0  89465.58151461916 37542.775857990273 0 
+ 6.2000958873176266 6 6.290650569642092 6
+7 0 0  1 2 2  89465.581514619364 37542.775857987581 0  89503.263288672388 37546.052695341205 0 
+ 1.6990614677072315 2 39.523045377700264 2
+1 89498.34375 37543.18359375 0 0.51445130432288266 0.85751959480847129 0 
+1 89495.390625 37525.44921875 0 0.16425805207772101 0.9864174026889595 0 
+1 89499.078125 37510.67578125 0 -0.24217343450463402 0.97023297594970959 0 
+1 89505.734375 37501.80859375 0 -0.60033816506334725 0.79974626449166564 0 
+1 89520.5078125 37495.8984375 0 -0.92845975927333024 0.37143300258607842 0 
+7 0 0  1 2 2  89507.788176455346 37496.255976755347 0  89531.638830728494 37497.957940919499 0 
+ 0.29070807495669032 2 24.202010659164024 2
+7 0 0  4 5 2  89507.594981174494 37496.240684339158 0  89507.643249401823 37496.244881782979 0  89507.691539295178 37496.248829772405 0  89507.739848949888 37496.25252814206 0  89507.788176455389 37496.255976755339 0 
+ 0.071238468338566924 5 0.086742588425107264 5
+7 0 0  1 2 2  89469.91320712147 37492.963846985542 0  89507.594981174494 37496.240684339165 0 
+ 1.6990614677072315 2 39.523045377700264 2
+7 0 0  5 6 2  89464.35620155785 37492.722656249985 0  89465.469040418568 37492.722656250044 0  89466.58184741385 37492.746799779787 0  89467.693934531402 37492.795074100264 0  89468.804615915418 37492.867443006129 0  89469.913207121281 37492.963846988241 0 
+ 6.2000958873176266 6 6.290650569642092 6
+7 0 0  1 2 2  89427.568750073609 37492.722656249985 0  89464.35620155785 37492.722656249985 0 
+ 1.1707091734476303 2 37.970627312103517 2
+7 0 0  5 6 2  89424.340686774492 37492.780161391362 0  89424.985855432518 37492.757145748394 0  89425.631338003397 37492.739895513914 0  89426.27704285775 37492.728401261615 0  89426.922877739155 37492.722656250022 0  89427.568750073624 37492.722656249993 0 
+ 3.162984811269054 6 3.2254023613222773 6
+7 0 0  1 2 2  89379.622263376528 37494.375439236239 0  89424.340686774478 37492.780161391354 0 
+ 2.4129011012208772 2 47.293774521690104 2
+7 0 0  5 6 2  89373.046534602196 37494.844812883333 0  89374.357870075939 37494.704236871818 0  89375.671904241579 37494.586944706767 0  89376.98784175067 37494.492981360949 0  89378.304887938968 37494.422435079323 0  89379.622263376223 37494.375439239899 0 
+ 6.1992706349623292 6 6.3277815401364137 6
+7 0 0  1 2 2  89328.593216838141 37499.610237320012 0  89373.04653460221 37494.844812883341 0 
+ 1.4386699403681846 2 46.166503508015197 2
+7 0 0  5 6 2  89327.49894759529 37499.688290022874 0  89327.718460500662 37499.680457887574 0  89327.937824326073 37499.668723900082 0  89328.15685826038 37499.653094890367 0  89328.375381716658 37499.633589383178 0  89328.593216837791 37499.610237317203 0 
+ 6.1730258926905792 6 6.2497173472860759 6
+7 0 0  1 2 2  89282.164011050903 37501.305822952963 0  89327.498947595319 37499.688290022859 0 
+ 1.5095198913739187 2 46.873329477009811 2
+7 0 0  5 6 2  89279.180373355848 37501.410559497628 0  89279.775813756612 37501.390001408661 0  89280.372228828346 37501.369237197723 0  89280.969287807558 37501.348278265003 0  89281.566659068645 37501.327136239604 0  89282.164011050903 37501.305822952912 0 
+ 4.6329902037804702 6 4.7134544916582994 6
+7 0 0  1 2 2  89232.705176040239 37503.015155436813 0  89279.180373355863 37501.410559497635 0 
+ 2.0363688587054649 2 48.686194767358877 2
+7 0 0  5 6 2  89231.363173554506 37502.988784125308 0  89231.630251268172 37503.008568489422 0  89231.898252064828 37503.021134115399 0  89232.166917436625 37503.026437691231 0  89232.435981562521 37503.024449601988 0  89232.705176040152 37503.015155432346 0 
+ 3.0601329938793498 6 3.168632769656555 6
+7 0 0  1 2 2  89190.931575100883 37499.993725280117 0  89231.363173554491 37502.988784125308 0 
+ 4.1357864557881516 2 44.839442635187361 2
+7 0 0  5 6 2  89182.070494004263 37499.454128428224 0  89183.835558255465 37499.538287910305 0  89185.609730659693 37499.634656478658 0  89187.387545742444 37499.742924121885 0  89189.163336142752 37499.862739123346 0  89190.931575100141 37499.993725280998 0 
+ 3.0443579100651261 6 3.2640453476566313 6
+7 0 0  1 2 2  89149.95628957123 37497.922900989252 0  89182.070494004278 37499.454128428239 0 
+ 0 2 32.420343677464707 2
+7 0 1  3 9 9  89025.963498009267 37531.772430349287 0  89051.681865747814 37570.806511509501 0  89068.323296493341 37581.453160167657 0  89097.223008080429 37583.87425722331 0  89126.922909255256 37577.494393908753 0  89152.649078861912 37554.026419602313 0  89171.544347229792 37516.783552905654 0  89135.499216754048 37471.145480840169 0  89043.979868021997 37443.51581731582 0 
+ 0 2 36.262906006700305 1 57.454088681212156 1 85.572945703489182 1 124.44586692001535 1 160.46619436519291 1 195.55253740483596 1 283.60428771698037 1 373.36099733802803 2
+Polygon3D 0
+PolygonOnTriangulations 99
+2 2 52 
+p 1.5362554819989 1 3.04435791006513 3.26404534765663 
+2 2 3 
+p 1.4583468921677 1 3.04435791006513 3.26404534765663 
+2 2 3 
+p 1.4583468921677 1 3.04435791006513 3.26404534765663 
+2 52 49 
+p 1.5362554819989 1 4.13578645578815 44.8394426351874 
+2 3 4 
+p 1.4583468921677 1 4.13578645578815 44.8394426351874 
+2 3 4 
+p 1.4583468921677 1 4.13578645578815 44.8394426351874 
+4 49 50 51 48 
+p 1.5362554819989 1 3.06013299387935 3.09629958580509 3.13246617773082 3.16863276965656 
+4 4 6 7 5 
+p 1.4583468921677 1 3.06013299387935 3.09629958580509 3.13246617773082 3.16863276965656 
+4 4 6 7 5 
+p 1.4583468921677 1 3.06013299387935 3.09629958580509 3.13246617773082 3.16863276965656 
+2 48 47 
+p 1.5362554819989 1 2.03636885870546 48.6861947673589 
+2 5 8 
+p 1.4583468921677 1 2.03636885870546 48.6861947673589 
+2 5 8 
+p 1.4583468921677 1 2.03636885870546 48.6861947673589 
+2 47 46 
+p 1.5362554819989 1 4.63299020378047 4.7134544916583 
+2 8 9 
+p 1.4583468921677 1 4.63299020378047 4.7134544916583 
+2 8 9 
+p 1.4583468921677 1 4.63299020378047 4.7134544916583 
+2 46 43 
+p 1.5362554819989 1 1.50951989137392 46.8733294770098 
+2 9 10 
+p 1.4583468921677 1 1.50951989137392 46.8733294770098 
+2 9 10 
+p 1.4583468921677 1 1.50951989137392 46.8733294770098 
+4 43 44 45 42 
+p 1.5362554819989 1 6.17302589269058 6.20711098362191 6.22841416545399 6.24971734728608 
+4 10 12 13 11 
+p 1.4583468921677 1 6.17302589269058 6.20711098362191 6.22841416545399 6.24971734728608 
+4 10 12 13 11 
+p 1.4583468921677 1 6.17302589269058 6.20711098362191 6.22841416545399 6.24971734728608 
+2 42 39 
+p 1.5362554819989 1 1.43866994036818 46.1665035080152 
+2 11 14 
+p 1.4583468921677 1 1.43866994036818 46.1665035080152 
+2 11 14 
+p 1.4583468921677 1 1.43866994036818 46.1665035080152 
+4 39 40 41 38 
+p 1.5362554819989 1 6.19927063496233 6.25638659281748 6.29208406647695 6.32778154013641 
+4 14 16 17 15 
+p 1.4583468921677 1 6.19927063496233 6.25638659281748 6.29208406647695 6.32778154013641 
+4 14 16 17 15 
+p 1.4583468921677 1 6.19927063496233 6.25638659281748 6.29208406647695 6.32778154013641 
+2 38 37 
+p 1.5362554819989 1 2.41290110122088 47.2937745216901 
+2 15 18 
+p 1.4583468921677 1 2.41290110122088 47.2937745216901 
+2 15 18 
+p 1.4583468921677 1 2.41290110122088 47.2937745216901 
+2 37 36 
+p 1.5362554819989 1 3.16298481126905 3.22540236132228 
+2 18 19 
+p 1.4583468921677 1 3.16298481126905 3.22540236132228 
+2 18 19 
+p 1.4583468921677 1 3.16298481126905 3.22540236132228 
+2 36 33 
+p 1.5362554819989 1 1.17070917344763 37.9706273121035 
+2 19 20 
+p 1.4583468921677 1 1.17070917344763 37.9706273121035 
+2 19 20 
+p 1.4583468921677 1 1.17070917344763 37.9706273121035 
+4 33 34 35 32 
+p 1.5362554819989 1 6.20009588731763 6.23028078142578 6.26046567553394 6.29065056964209 
+4 20 22 23 21 
+p 1.4583468921677 1 6.20009588731763 6.23028078142578 6.26046567553394 6.29065056964209 
+4 20 22 23 21 
+p 1.4583468921677 1 6.20009588731763 6.23028078142578 6.26046567553394 6.29065056964209 
+2 19 20 
+p 0.425562500800006 1 0 17.978570685854 
+2 26 25 
+p 1.4583468921677 1 0 17.978570685854 
+2 9 10 
+p 0.203435998463916 1 0 17.978570685854 
+2 9 10 
+p 0.203435998463916 1 0 17.978570685854 
+2 26 25 
+p 1.4583468921677 1 0 17.978570685854 
+2 18 19 
+p 0.425562500800006 1 0 15.2266907703679 
+2 27 26 
+p 1.4583468921677 1 0 15.2266907703679 
+2 8 9 
+p 0.203435998463916 1 0 15.2266907703679 
+2 8 9 
+p 0.203435998463916 1 0 15.2266907703679 
+2 27 26 
+p 1.4583468921677 1 0 15.2266907703679 
+2 17 18 
+p 0.425562500800006 1 0 11.0875009908751 
+2 28 27 
+p 1.4583468921677 1 0 11.0875009908751 
+2 7 8 
+p 0.203435998463916 1 0 11.0875009908751 
+2 7 8 
+p 0.203435998463916 1 0 11.0875009908751 
+2 28 27 
+p 1.4583468921677 1 0 11.0875009908751 
+2 26 27 
+p 1.5362554819989 1 0.0712384683385669 0.0867425884251073 
+2 31 30 
+p 1.4583468921677 1 0.0712384683385669 0.0867425884251073 
+2 31 30 
+p 1.4583468921677 1 0.0712384683385669 0.0867425884251073 
+2 23 26 
+p 1.5362554819989 1 1.69906146770723 39.5230453777003 
+2 32 31 
+p 1.4583468921677 1 1.69906146770723 39.5230453777003 
+2 32 31 
+p 1.4583468921677 1 1.69906146770723 39.5230453777003 
+4 22 24 25 23 
+p 1.5362554819989 1 6.20009588731763 6.23028078142578 6.26046567553394 6.29065056964209 
+4 33 34 35 32 
+p 1.4583468921677 1 6.20009588731763 6.23028078142578 6.26046567553394 6.29065056964209 
+4 33 34 35 32 
+p 1.4583468921677 1 6.20009588731763 6.23028078142578 6.26046567553394 6.29065056964209 
+2 21 22 
+p 1.5362554819989 1 1.17070917344763 37.9706273121035 
+2 36 33 
+p 1.4583468921677 1 1.17070917344763 37.9706273121035 
+2 36 33 
+p 1.4583468921677 1 1.17070917344763 37.9706273121035 
+2 20 21 
+p 1.5362554819989 1 3.16298481126905 3.22540236132228 
+2 37 36 
+p 1.4583468921677 1 3.16298481126905 3.22540236132228 
+2 37 36 
+p 1.4583468921677 1 3.16298481126905 3.22540236132228 
+2 17 20 
+p 1.5362554819989 1 2.41290110122088 47.2937745216901 
+2 38 37 
+p 1.4583468921677 1 2.41290110122088 47.2937745216901 
+2 38 37 
+p 1.4583468921677 1 2.41290110122088 47.2937745216901 
+4 16 18 19 17 
+p 1.5362554819989 1 6.19927063496233 6.25638659281748 6.29208406647695 6.32778154013641 
+4 39 40 41 38 
+p 1.4583468921677 1 6.19927063496233 6.25638659281748 6.29208406647695 6.32778154013641 
+4 39 40 41 38 
+p 1.4583468921677 1 6.19927063496233 6.25638659281748 6.29208406647695 6.32778154013641 
+2 13 16 
+p 1.5362554819989 1 1.43866994036818 46.1665035080152 
+2 42 39 
+p 1.4583468921677 1 1.43866994036818 46.1665035080152 
+2 42 39 
+p 1.4583468921677 1 1.43866994036818 46.1665035080152 
+4 12 14 15 13 
+p 1.5362554819989 1 6.17302589269058 6.20711098362191 6.22841416545399 6.24971734728608 
+4 43 44 45 42 
+p 1.4583468921677 1 6.17302589269058 6.20711098362191 6.22841416545399 6.24971734728608 
+4 43 44 45 42 
+p 1.4583468921677 1 6.17302589269058 6.20711098362191 6.22841416545399 6.24971734728608 
+2 11 12 
+p 1.5362554819989 1 1.50951989137392 46.8733294770098 
+2 46 43 
+p 1.4583468921677 1 1.50951989137392 46.8733294770098 
+2 46 43 
+p 1.4583468921677 1 1.50951989137392 46.8733294770098 
+2 10 11 
+p 1.5362554819989 1 4.63299020378047 4.7134544916583 
+2 47 46 
+p 1.4583468921677 1 4.63299020378047 4.7134544916583 
+2 47 46 
+p 1.4583468921677 1 4.63299020378047 4.7134544916583 
+2 7 10 
+p 1.5362554819989 1 2.03636885870546 48.6861947673589 
+2 48 47 
+p 1.4583468921677 1 2.03636885870546 48.6861947673589 
+2 48 47 
+p 1.4583468921677 1 2.03636885870546 48.6861947673589 
+4 6 8 9 7 
+p 1.5362554819989 1 3.06013299387935 3.09629958580509 3.13246617773082 3.16863276965656 
+4 49 50 51 48 
+p 1.4583468921677 1 3.06013299387935 3.09629958580509 3.13246617773082 3.16863276965656 
+4 49 50 51 48 
+p 1.4583468921677 1 3.06013299387935 3.09629958580509 3.13246617773082 3.16863276965656 
+2 5 6 
+p 1.5362554819989 1 4.13578645578815 44.8394426351874 
+2 52 49 
+p 1.4583468921677 1 4.13578645578815 44.8394426351874 
+2 52 49 
+p 1.4583468921677 1 4.13578645578815 44.8394426351874 
+2 4 5 
+p 1.5362554819989 1 3.04435791006513 3.26404534765663 
+2 53 52 
+p 1.4583468921677 1 3.04435791006513 3.26404534765663 
+2 53 52 
+p 1.4583468921677 1 3.04435791006513 3.26404534765663 
+Surfaces 19
+1 89164.822727216524 37523.660144969479 0 0 -0 1 0.047626582849348696 -0.99886521042936227 -0 0.99886521042936227 0.047626582849348696 0 
+1 89184.98037206872 37524.657480506554 0 0 -0 1 0.060774959307161786 -0.99815149367278555 -0 0.99815149367278555 0.060774959307161786 0 
+1 89209.300505145991 37526.422942857062 0 0 -0 1 0.073874767302730585 -0.99726752617137171 -0 0.99726752617137171 0.073874767302730585 0 
+1 89231.541059204596 37527.996988920444 0 0 -0 1 0.019698979872157633 -0.99980595626951352 -0 0.99980595626951352 0.019698979872157633 0 
+1 89256.805407089254 37527.197970341847 0 -0 0 1 -0.034505295281782332 -0.99940451499756444 0 0.99940451499756444 -0.034505295281782332 0 
+1 89281.548438610727 37526.343115719857 0 -0 0 1 -0.035081719862620604 -0.99938444701300044 0 0.99938444701300044 -0.035081719862620604 0 
+1 89305.72290238821 37525.48115873152 0 -0 0 1 -0.035656922531625015 -0.99936408974686186 0 0.99936408974686186 -0.035656922531625015 0 
+1 89329.825486404196 37524.587093325994 0 -0 0 1 -0.071163197322485147 -0.9974646857642836 0 0.9974646857642836 -0.071163197322485147 0 
+1 89353.484624026634 37522.085101742676 0 -0 0 1 -0.10658993249692038 -0.99430306561445436 0 0.99430306561445436 -0.10658993249692038 0 
+1 89378.111401203496 37519.502447672487 0 -0 0 1 -0.071195622364936609 -0.99746237189984732 0 0.99746237189984732 -0.071195622364936609 0 
+1 89402.872754105658 37518.561907696101 0 -0 0 1 -0.035651161405180341 -0.99936429528498849 0 0.99936429528498849 -0.035651161405180341 0 
+1 89426.399717959124 37517.736528892812 0 -0 0 1 -0.017812665430832073 -0.99984134188892659 0 0.99984134188892659 -0.017812665430832073 0 
+1 89445.962475816137 37517.722656249985 0 -0 0 1 -3.553322753867855e-011 -1 0 1 -3.553322753867855e-011 0 
+1 89466.052749435941 37517.771735078662 0 0 -0 1 0.043362591112618018 -0.9990594004822736 -0 0.9990594004822736 0.043362591112618018 0 
+1 89486.588247896929 37519.508271163373 0 0 -0 1 0.086633849915938671 -0.99624022005174162 -0 0.99624022005174162 0.086633849915938671 0 
+1 89529.375 37564.609375 0 0 0 1 1 0 -0 -0 1 0 
+1 89517.934047863426 37522.043549167909 0 0 -0 1 0.071178229266440254 -0.99746361321027355 -0 0.99746361321027355 0.071178229266440254 0 
+1 89505.718868551063 37521.170377296658 0 0 -0 1 0.07890841049482307 -0.99688187000927075 -0 0.99688187000927075 0.07890841049482307 0 
+1 89025.963498009267 37531.772430349287 0 0 0 1 1 0 -0 -0 1 0 
+Triangulations 6
+52 50 1 7.37443883735978e-010
+89147.5749604288 37547.8661615107 0 89179.6891648618 37549.3973889497 0 89149.9562895712 37497.9229009893 0 89182.0704940043 37499.4541284282 0 89190.9315751005 37499.9937252806 0 89231.3631735545 37502.9887841253 0 89232.7051760402 37503.0151554346 0 89231.8092325494 37503.0137220555 0 89232.2567626422 37503.022534119 0 89279.1803733559 37501.4105594976 0 89282.1640110509 37501.3058229529 0 89327.4989475953 37499.6882900229 0 89328.593216838 37499.6102373186 0 89327.9863009231 37499.6631861882 0 89328.2901751337 37499.6396966418 0 89373.0465346022 37494.8448128833 0 89379.6222633764 37494.3754392381 0 89375.9652463197 37494.5784624864 0 89377.7929968074 37494.4588556295 0 89424.3406867745 37492.7801613914 0 89427.5687500736 37492.72265625 0 89464.3562015579 37492.72265625 0 89469.9132071214 37492.9638469869 0 89466.210642897 37492.7494762282 0 89468.0634862795 37492.8298999262 0 89507.5949811745 37496.2406843392 0 89507.7881764553 37496.2559767553 0 89531.6388307285 37497.9579409195 0 89528.0799192715 37547.8311215805 0 89504.2292649984 37546.1291574163 0 89503.2632886724 37546.0526953412 0 89465.5815146193 37542.7758579889 0 89464.3562015587 37542.72265625 0 89464.7647716708 37542.7285664242 0 89465.1733879371 37542.7463033623 0 89427.5687500744 37542.72265625 0 89426.1232448348 37542.748376156 0 89381.4048214367 37544.3436540027 0 89378.3760312151 37544.5599661653 0 89379.7226346977 37544.4370828708 0 89380.5649101811 37544.3819614329 0 89333.9227134509 37549.3253906006 0 89329.2817937255 37549.6564945101 0 89331.3472429018 37549.5500989937 0 89332.6360719573 37549.4504703853 0 89283.9468571811 37551.2740274402 0 89280.9056381383 37551.3807852469 0 89234.4304408226 37552.9853811838 0 89227.6694351911 37552.852160434 0 89229.9211306294 37552.9780600555 0 89232.1757812848 37553.0224685455 0 89187.2378367371 37549.8571015893 0 -25.0000000000073 -16.075344349636 -24.9999999999927 16.0753443496214 24.9999999999868 -16.0753443496511 25 16.0753443496214 24.8830384890753 24.9520691372891 23.8169972798205 65.4804306535807 23.8545708912352 66.8221662240539 23.8133319145659 65.9271711738334 23.8258441799423 66.374613102544 27.6708007826091 113.168202549321 27.9175189412708 116.143466199705 31.6923644231283 161.349919564847 31.822444860125 162.439229658339 31.7406507438311 161.835524239315 31.7785861248792 162.137934889789 38.6996211614678 206.615141379763 39.4816416558533 213.161053422635 39.1046775722123 209.517855614353 39.3111982104701 211.337835524054 43.2048948965967 257.752753187771 43.4160764058906 260.974414540979 45.168137011824 297.720120008933 45.1918811601645 303.282306631081 45.2296681727448 299.57373429132 45.2375803375133 301.428305392391 43.7134164639428 341.077384365664 43.7073426324932 341.271088736103 43.1432350012619 365.175736272751 -6.84284888580114 363.996152602092 -6.27874125457311 340.091505065386 -6.24837209933321 339.122983291978 -4.76990740041947 301.32790555738 -4.77512350960023 300.101449152193 -4.76156817869247 300.509837104639 -4.75982399267362 300.918834427184 -6.5271841155336 263.355743684238 -6.62171930988552 261.913103740124 -10.3449725469618 217.321403975118 -10.7052901710922 214.306353002175 -10.5184122008973 215.645575861694 -10.423238611169 216.484270293931 -17.5824664752363 170.130441281231 -18.134225797854 165.510557370682 -17.9295807316394 167.56859544191 -17.7686826569724 168.851216977485 -21.9090712797479 120.304104005554 -22.160550809509 117.2714206159 -25.9767807053504 70.9253842909093 -26.1657147256628 64.1657061288861 -26.1842309182405 66.4208425354414 -26.1212077077211 68.6750496613828 -25.0996735155059 23.6373446132784 20 38 17 20 37 38 21 36 37 21 37 20 4 2 1 4 1 3 22 33 36 22 36 21 24 33 22 5 49 52 5 52 2 24 34 33 5 2 4 6 50 49 25 35 34 25 34 24 6 49 5 8 51 50 23 35 25 8 50 6 23 32 35 9 48 51 9 51 8 26 32 23 26 31 32 7 48 9 27 29 30 27 30 31 27 31 26 10 46 47 10 47 48 28 29 27 10 48 7 11 46 10 43 46 11 12 43 11 14 44 43 14 43 12 15 45 44 15 44 14 13 42 45 13 45 15 16 42 13 16 39 42 18 39 16 18 40 39 18 41 40 19 41 18 19 38 41 17 38 19 
+89 87 1 7.64195817737345e-010
+-164.284909447393 24.9403846312125 0 -138.487969749665 26.1704005261854 0 -130.939297874356 26.6301131657383 0 -90.50769942037 29.6251720104847 0 -83.7466937888821 29.7583927603046 0 -88.2560039820673 29.7510716319739 0 -86.0013533267047 29.7954801219821 0 -37.2714964732149 28.1537968233606 0 -34.230277430368 28.0470390166374 0 11.1046591140184 26.4295060865625 0 15.7455788394291 26.0984021770782 0 13.1701082903164 26.3231105701416 0 14.4589373458293 26.2234819617588 0 60.1988966036588 21.3329777418185 0 63.2276868252229 21.1166655791603 0 61.5455000861839 21.2100944472622 0 62.3877755695721 21.1549730093975 0 107.946110223318 19.5213877324422 0 109.391615462941 19.4956678264643 0 146.179066947181 19.4956678264643 0 147.404380007778 19.5488695654276 0 146.587637059318 19.5015780006506 0 146.996253325589 19.5193149387778 0 181.711834649745 22.532273390003 0 180.166615388516 19.9566053264789 0 177.213490388516 2.22223032647889 0 180.900990388516 -12.5512071735211 0 187.557240388516 -21.4183946735211 0 199.646821047034 -26.2548662590125 0 189.611041843862 -26.9710116681745 0 189.417846563025 -26.9863040843557 0 151.736072509884 -30.2631414366115 0 146.179066946366 -30.5043321735357 0 148.033508285531 -30.4775121953498 0 149.886351668043 -30.3970884972805 0 109.391615462126 -30.5043321735357 0 106.163552162994 -30.4468270321668 0 61.445128764899 -28.8515491854487 0 54.8693999907264 -28.3821755401805 0 57.7881117081852 -28.6485259371475 0 59.6158621959476 -28.768132793979 0 10.4160822264821 -23.6167511049207 0 9.32181298382056 -23.5386984006545 0 9.80916631163564 -23.5638022352869 0 10.1130405222357 -23.5872917817615 0 -36.0131235605659 -21.9211654705796 0 -38.9967612556211 -21.8164289258857 0 -85.4719585712883 -20.2118329889418 0 -86.8139610569779 -20.2382042982135 0 -86.3679020620475 -20.2132663679804 0 -85.9203719693178 -20.2044543044758 0 -127.245559510964 -23.2332631429599 0 -136.106640607206 -23.7728599952825 0 -162.511862415355 -25.0318792012404 0 -162.13998825445 21.6455804184079 0 -160.342513689044 18.6074700220124 0 -158.998458540475 16.1055316450947 0 -157.88745426583 13.8286640943115 0 -156.880917119997 11.5333313668452 0 -156.073130750912 9.45599654095713 0 -155.432225727665 7.58027028640936 0 -154.929997941566 5.88950194021163 0 -154.541939130373 4.36740307787113 0 -154.21757150082 2.84642522715149 0 -153.959894535583 1.32802149224881 0 -153.787484857297 -0.0351400095096324 0 -153.682387301931 -1.25832078770327 0 -153.626378664601 -2.477229024189 0 -153.621052993403 -3.69109247982124 0 -153.660911306069 -4.77861804659187 0 -153.733948677094 -5.75289719110879 0 -153.842853130103 -6.72253557607473 0 -153.987190602027 -7.6873681696743 0 -154.166208033348 -8.64729103208083 0 -154.379152301655 -9.6022002355312 0 -154.625270284567 -10.5519918522623 0 -154.903808859701 -11.4965619544892 0 -155.214014904661 -12.4358066144487 0 -155.555135297065 -13.3696219043704 0 -155.926416914532 -14.2979038964768 0 -156.32710663465 -15.2205486630046 0 -156.756451335052 -16.1374522761762 0 -157.213697893341 -17.0485108082212 0 -157.698093187122 -17.9536203313692 0 -158.208884094027 -18.8526769178497 0 -158.929696786159 -20.0418237256454 0 -159.79287860055 -21.3662238162215 0 -160.708954863847 -22.6761084222671 0 -161.590347195612 -23.8603372005309 0 -25.0000000000044 -9.75090270389581 -24.9999999999927 16.0753443496214 -25.0996735164372 23.6373446125654 -26.1657147256701 64.165706128857 -25.9767807008902 70.9253842906328 -26.1842309182405 66.4208425354414 -26.1212077077211 68.6750496613828 -22.1605508095163 117.2714206159 -21.9090712797042 120.304104005569 -18.1342257978467 165.510557370682 -17.5824664724423 170.13044128078 -17.9295807316394 167.56859544191 -17.7686826569724 168.851216977485 -10.7052901710995 214.306353002175 -10.3449725506362 217.321403975002 -10.5184122008973 215.645575861694 -10.423238611169 216.484270293931 -6.62171930988552 261.913103740124 -6.5271841155336 263.355743684238 -4.77512350960751 300.101449152207 -4.76990740312613 301.327905557308 -4.76156817869247 300.509837104639 -4.75982399267362 300.918834427184 -6.11597885996557 335.738517787025 -3.61682715086525 334.072381756083 13.956775812866 330.277980251315 28.8890715943255 333.25768736971 38.0632111445206 339.484070086521 43.469979767348 351.329587000331 43.707342632486 341.271088736059 43.7134164639501 341.077384365664 45.1918811628711 303.282306631139 45.168137011824 297.720120008933 45.2296681727448 299.57373429132 45.2375803375133 301.428305392391 43.4160764058906 260.974414540964 43.2048948965894 257.752753187786 39.4816416595204 213.161053422766 38.6996211614751 206.615141379749 39.1046775722123 209.517855614353 39.3111982104701 211.337835524054 31.822444857331 162.439229658805 31.6923644231138 161.349919564818 31.7406507438311 161.835524239315 31.7785861248792 162.137934889789 27.9175189412199 116.143466199719 27.6708007826164 113.168202549306 23.854570886775 66.8221662243595 23.8169972798205 65.4804306535952 23.8133319145659 65.9271711738334 23.8258441799423 66.374613102544 24.883038489992 24.9520691379876 25.0000000000145 16.0753443496069 25 -10.3598758707283 -21.6067794297546 -7.76533581095473 -18.4865090780454 -6.11459581743192 -15.9233971208156 -4.89122466402916 -13.5961999984484 -3.88992056649371 -11.255534065855 -2.99384448282251 -9.14208447343275 -2.28591114046902 -7.23796265728623 -1.73506784142888 -5.52519358411494 -1.3139354969078 -3.98634006856458 -0.998809418377915 -2.45163968586164 -0.747248855445875 -0.922686746350276 -0.56218068061864 0.447139137781718 -0.454889375230739 1.67393730061224 -0.40816700415089 2.89412983274925 -0.410274358957027 4.10686945230915 -0.462766899701116 5.19126259118281 -0.554375108080702 6.16095761348573 -0.673731183459971 7.12430891597563 -0.828692615709114 8.08117232703968 -1.01881797443774 9.03147989047232 -1.24335010437385 9.97516366508433 -1.50153178804003 10.9121557096865 -1.79260580795884 11.8423880830895 -2.11581494665286 12.7657928441041 -2.47040198664466 13.6823020515411 -2.8556097104568 14.5918477642112 -3.27068090061186 15.4943620409252 -3.71485833963241 16.3897769404938 -4.18738481004103 17.2780245217279 -4.68750309436027 18.159036843438 -5.21445597511272 19.0327459644351 -5.76748623482095 20.1862134954393 -6.54411595519225 21.4680002704054 -7.4693948905021 22.7327688510099 -8.44681692771962 23.8736760738974 -9.3836098346864 35 23 22 50 7 6 35 22 34 50 6 49 32 21 23 32 26 21 51 5 7 32 23 35 51 7 50 27 26 32 48 5 51 28 27 32 31 28 32 47 8 5 47 9 8 47 5 48 30 28 31 46 9 47 29 28 30 2 1 55 2 55 56 2 56 57 2 57 58 43 10 9 2 58 59 2 59 60 2 60 61 43 9 46 44 10 43 44 12 10 45 12 44 62 2 61 45 13 12 63 2 62 42 13 45 42 11 13 64 2 63 39 11 42 39 14 11 40 16 14 40 17 16 3 64 65 40 14 39 3 2 64 41 17 40 66 3 65 41 15 17 38 15 41 53 69 70 37 18 15 53 70 71 53 71 72 53 72 73 53 73 74 53 74 75 37 15 38 53 75 76 53 76 77 53 77 78 36 19 18 53 78 79 53 79 80 53 80 81 53 81 82 53 82 83 36 18 37 53 83 84 53 84 85 53 85 86 53 86 87 53 87 88 53 88 89 53 89 54 25 24 21 33 20 19 33 19 36 52 4 3 52 69 53 52 3 66 26 25 21 52 66 67 52 67 68 34 22 20 52 68 69 34 20 33 49 6 4 49 4 52 
+89 87 1 7.64195817737345e-010
+-164.284909447393 24.9403846312125 0 -138.487969749665 26.1704005261854 0 -130.939297874356 26.6301131657383 0 -90.50769942037 29.6251720104847 0 -83.7466937888821 29.7583927603046 0 -88.2560039820673 29.7510716319739 0 -86.0013533267047 29.7954801219821 0 -37.2714964732149 28.1537968233606 0 -34.230277430368 28.0470390166374 0 11.1046591140184 26.4295060865625 0 15.7455788394291 26.0984021770782 0 13.1701082903164 26.3231105701416 0 14.4589373458293 26.2234819617588 0 60.1988966036588 21.3329777418185 0 63.2276868252229 21.1166655791603 0 61.5455000861839 21.2100944472622 0 62.3877755695721 21.1549730093975 0 107.946110223318 19.5213877324422 0 109.391615462941 19.4956678264643 0 146.179066947181 19.4956678264643 0 147.404380007778 19.5488695654276 0 146.587637059318 19.5015780006506 0 146.996253325589 19.5193149387778 0 181.711834649745 22.532273390003 0 180.166615388516 19.9566053264789 0 177.213490388516 2.22223032647889 0 180.900990388516 -12.5512071735211 0 187.557240388516 -21.4183946735211 0 199.646821047034 -26.2548662590125 0 189.611041843862 -26.9710116681745 0 189.417846563025 -26.9863040843557 0 151.736072509884 -30.2631414366115 0 146.179066946366 -30.5043321735357 0 148.033508285531 -30.4775121953498 0 149.886351668043 -30.3970884972805 0 109.391615462126 -30.5043321735357 0 106.163552162994 -30.4468270321668 0 61.445128764899 -28.8515491854487 0 54.8693999907264 -28.3821755401805 0 57.7881117081852 -28.6485259371475 0 59.6158621959476 -28.768132793979 0 10.4160822264821 -23.6167511049207 0 9.32181298382056 -23.5386984006545 0 9.80916631163564 -23.5638022352869 0 10.1130405222357 -23.5872917817615 0 -36.0131235605659 -21.9211654705796 0 -38.9967612556211 -21.8164289258857 0 -85.4719585712883 -20.2118329889418 0 -86.8139610569779 -20.2382042982135 0 -86.3679020620475 -20.2132663679804 0 -85.9203719693178 -20.2044543044758 0 -127.245559510964 -23.2332631429599 0 -136.106640607206 -23.7728599952825 0 -162.511862415355 -25.0318792012404 0 -162.13998825445 21.6455804184079 0 -160.342513689044 18.6074700220124 0 -158.998458540475 16.1055316450947 0 -157.88745426583 13.8286640943115 0 -156.880917119997 11.5333313668452 0 -156.073130750912 9.45599654095713 0 -155.432225727665 7.58027028640936 0 -154.929997941566 5.88950194021163 0 -154.541939130373 4.36740307787113 0 -154.21757150082 2.84642522715149 0 -153.959894535583 1.32802149224881 0 -153.787484857297 -0.0351400095096324 0 -153.682387301931 -1.25832078770327 0 -153.626378664601 -2.477229024189 0 -153.621052993403 -3.69109247982124 0 -153.660911306069 -4.77861804659187 0 -153.733948677094 -5.75289719110879 0 -153.842853130103 -6.72253557607473 0 -153.987190602027 -7.6873681696743 0 -154.166208033348 -8.64729103208083 0 -154.379152301655 -9.6022002355312 0 -154.625270284567 -10.5519918522623 0 -154.903808859701 -11.4965619544892 0 -155.214014904661 -12.4358066144487 0 -155.555135297065 -13.3696219043704 0 -155.926416914532 -14.2979038964768 0 -156.32710663465 -15.2205486630046 0 -156.756451335052 -16.1374522761762 0 -157.213697893341 -17.0485108082212 0 -157.698093187122 -17.9536203313692 0 -158.208884094027 -18.8526769178497 0 -158.929696786159 -20.0418237256454 0 -159.79287860055 -21.3662238162215 0 -160.708954863847 -22.6761084222671 0 -161.590347195612 -23.8603372005309 0 -25.0000000000044 -9.75090270389581 -24.9999999999927 16.0753443496214 -25.0996735164372 23.6373446125654 -26.1657147256701 64.165706128857 -25.9767807008902 70.9253842906328 -26.1842309182405 66.4208425354414 -26.1212077077211 68.6750496613828 -22.1605508095163 117.2714206159 -21.9090712797042 120.304104005569 -18.1342257978467 165.510557370682 -17.5824664724423 170.13044128078 -17.9295807316394 167.56859544191 -17.7686826569724 168.851216977485 -10.7052901710995 214.306353002175 -10.3449725506362 217.321403975002 -10.5184122008973 215.645575861694 -10.423238611169 216.484270293931 -6.62171930988552 261.913103740124 -6.5271841155336 263.355743684238 -4.77512350960751 300.101449152207 -4.76990740312613 301.327905557308 -4.76156817869247 300.509837104639 -4.75982399267362 300.918834427184 -6.11597885996557 335.738517787025 -3.61682715086525 334.072381756083 13.956775812866 330.277980251315 28.8890715943255 333.25768736971 38.0632111445206 339.484070086521 43.469979767348 351.329587000331 43.707342632486 341.271088736059 43.7134164639501 341.077384365664 45.1918811628711 303.282306631139 45.168137011824 297.720120008933 45.2296681727448 299.57373429132 45.2375803375133 301.428305392391 43.4160764058906 260.974414540964 43.2048948965894 257.752753187786 39.4816416595204 213.161053422766 38.6996211614751 206.615141379749 39.1046775722123 209.517855614353 39.3111982104701 211.337835524054 31.822444857331 162.439229658805 31.6923644231138 161.349919564818 31.7406507438311 161.835524239315 31.7785861248792 162.137934889789 27.9175189412199 116.143466199719 27.6708007826164 113.168202549306 23.854570886775 66.8221662243595 23.8169972798205 65.4804306535952 23.8133319145659 65.9271711738334 23.8258441799423 66.374613102544 24.883038489992 24.9520691379876 25.0000000000145 16.0753443496069 25 -10.3598758707283 -21.6067794297546 -7.76533581095473 -18.4865090780454 -6.11459581743192 -15.9233971208156 -4.89122466402916 -13.5961999984484 -3.88992056649371 -11.255534065855 -2.99384448282251 -9.14208447343275 -2.28591114046902 -7.23796265728623 -1.73506784142888 -5.52519358411494 -1.3139354969078 -3.98634006856458 -0.998809418377915 -2.45163968586164 -0.747248855445875 -0.922686746350276 -0.56218068061864 0.447139137781718 -0.454889375230739 1.67393730061224 -0.40816700415089 2.89412983274925 -0.410274358957027 4.10686945230915 -0.462766899701116 5.19126259118281 -0.554375108080702 6.16095761348573 -0.673731183459971 7.12430891597563 -0.828692615709114 8.08117232703968 -1.01881797443774 9.03147989047232 -1.24335010437385 9.97516366508433 -1.50153178804003 10.9121557096865 -1.79260580795884 11.8423880830895 -2.11581494665286 12.7657928441041 -2.47040198664466 13.6823020515411 -2.8556097104568 14.5918477642112 -3.27068090061186 15.4943620409252 -3.71485833963241 16.3897769404938 -4.18738481004103 17.2780245217279 -4.68750309436027 18.159036843438 -5.21445597511272 19.0327459644351 -5.76748623482095 20.1862134954393 -6.54411595519225 21.4680002704054 -7.4693948905021 22.7327688510099 -8.44681692771962 23.8736760738974 -9.3836098346864 35 23 22 50 7 6 35 22 34 50 6 49 32 21 23 32 26 21 51 5 7 32 23 35 51 7 50 27 26 32 48 5 51 28 27 32 31 28 32 47 8 5 47 9 8 47 5 48 30 28 31 46 9 47 29 28 30 2 1 55 2 55 56 2 56 57 2 57 58 43 10 9 2 58 59 2 59 60 2 60 61 43 9 46 44 10 43 44 12 10 45 12 44 62 2 61 45 13 12 63 2 62 42 13 45 42 11 13 64 2 63 39 11 42 39 14 11 40 16 14 40 17 16 3 64 65 40 14 39 3 2 64 41 17 40 66 3 65 41 15 17 38 15 41 53 69 70 37 18 15 53 70 71 53 71 72 53 72 73 53 73 74 53 74 75 37 15 38 53 75 76 53 76 77 53 77 78 36 19 18 53 78 79 53 79 80 53 80 81 53 81 82 53 82 83 36 18 37 53 83 84 53 84 85 53 85 86 53 86 87 53 87 88 53 88 89 53 89 54 25 24 21 33 20 19 33 19 36 52 4 3 52 69 53 52 3 66 26 25 21 52 66 67 52 67 68 34 22 20 52 68 69 34 20 33 49 6 4 49 4 52 
+22 20 1 1.77635683940025e-015
+89529.375 37564.609375 0 89537.5 37572.734375 0 89545.625 37577.90625 0 89550.8046875 37575.69140625 0 89563.359375 37575.69140625 0 89576.6640625 37569.78125 0 89579.6171875 37560.17578125 0 89589.9609375 37546.875 0 89597.3515625 37538.01171875 0 89601.78125 37523.97265625 0 89594.390625 37514.3671875 0 89584.046875 37504.76171875 0 89573.703125 37498.11328125 0 89560.40625 37493.6796875 0 89541.9375 37491.46484375 0 89520.5078125 37495.8984375 0 89505.734375 37501.80859375 0 89499.078125 37510.67578125 0 89495.390625 37525.44921875 0 89498.34375 37543.18359375 0 89504.9921875 37554.265625 0 89510.1640625 37561.65234375 0 0 0 8.125 8.125 16.25 13.296875 21.4296875 11.08203125 33.984375 11.08203125 47.2890625 5.171875 50.2421875 -4.43359375 60.5859375 -17.734375 67.9765625 -26.59765625 72.40625 -40.63671875 65.015625 -50.2421875 54.671875 -59.84765625 44.328125 -66.49609375 31.03125 -70.9296875 12.5625 -73.14453125 -8.8671875 -68.7109375 -23.640625 -62.80078125 -30.296875 -53.93359375 -33.984375 -39.16015625 -31.03125 -21.42578125 -24.3828125 -10.34375 -19.2109375 -2.95703125 16 18 17 19 18 16 20 19 16 1 15 14 1 16 15 1 21 20 1 22 21 1 20 16 4 2 1 4 3 2 9 11 10 8 12 11 8 13 12 8 11 9 7 5 4 7 14 13 7 1 14 7 13 8 7 4 1 6 5 7 
+10 8 1 1.42650335988037e-011
+181.711834649745 22.532273390003 0 185.086154060918 22.8257069176834 0 186.052130386874 22.9021689927977 0 209.902784660022 24.6041331569577 0 213.461696117025 -25.2690475040145 0 199.646821047034 -26.2548662590125 0 187.557240388516 -21.4183946735211 0 180.900990388516 -12.5512071735211 0 177.213490388516 2.22223032647889 0 180.166615388516 19.9566053264789 0 -6.11597885996557 335.738517787025 -6.24837209934049 339.12298329192 -6.27874125455855 340.091505065371 -6.84284888579714 363.996152602078 43.1432350012555 365.175736272772 43.4699797673438 351.329587000319 38.0632111445206 339.484070086521 28.8890715943255 333.25768736971 13.956775812866 330.277980251315 -3.61682715086525 334.072381756083 2 1 10 3 2 10 9 3 10 4 3 9 8 4 9 6 8 7 6 4 8 5 4 6 
+10 8 1 7.97228949522832e-012
+181.711834649745 22.532273390003 0 185.086154060918 22.8257069176834 0 186.052130386874 22.9021689927977 0 209.902784660022 24.6041331569577 0 213.461696117025 -25.2690475040145 0 199.646821047034 -26.2548662590125 0 187.557240388516 -21.4183946735211 0 180.900990388516 -12.5512071735211 0 177.213490388516 2.22223032647889 0 180.166615388516 19.9566053264789 0 -29.4860307387652 -18.8501131864729 -26.1117113275541 -18.5566796588028 -25.1457350016426 -18.4802175836812 -1.29508072849421 -16.7782534195212 2.26383072849421 -66.6514340805006 -11.5510443414805 -67.6372528354945 -23.640625 -62.80078125 -30.296875 -53.93359375 -33.984375 -39.16015625 -31.03125 -21.42578125 6 8 7 2 1 10 3 10 9 3 2 10 4 6 5 4 9 8 4 8 6 4 3 9 
+
+TShapes 78
+Ve
+1.00000001776357e-007
+-164.28490944739 24.9403846312127 0
+0 0
+
+0101101
+*
+Ve
+1.01e-007
+89179.6891648618 37549.3973889497 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  1 0 6.37748614472768 32.4203436774647
+2  1 1 0 6.37748614472768 32.4203436774647
+0
+
+0101000
++78 3 -77 0 *
+Ve
+2.19534980935138e-007
+89187.2378367371 37549.8571015893 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  2 0 3.04435791006513 3.26404534765663
+2  2 2 0 3.04435791006513 3.26404534765663
+2  3 1 0 3.04435791006513 3.26404534765663
+6  1 1 0
+6  2 2 5
+6  3 3 7
+0
+
+0101000
+-75 0 +77 0 *
+Ve
+1.01e-007
+89227.6694351911 37552.852160434 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  3 0 4.13578645578815 44.8394426351874
+2  4 3 0 4.13578645578815 44.8394426351874
+2  5 1 0 4.13578645578815 44.8394426351874
+6  4 1 0
+6  5 2 5
+6  6 3 7
+0
+
+0101000
+-73 0 +75 0 *
+Ve
+1.06940469647803e-007
+89234.4304408226 37552.9853811838 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  4 0 3.06013299387935 3.16863276965656
+2  6 4 0 3.06013299387935 3.16863276965656
+2  7 1 0 3.06013299387935 3.16863276965656
+6  7 1 0
+6  8 2 5
+6  9 3 7
+0
+
+0101000
+-71 0 +73 0 *
+Ve
+1.01e-007
+89280.9056381383 37551.3807852469 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  5 0 2.03636885870546 48.6861947673589
+2  8 5 0 2.03636885870546 48.6861947673589
+2  9 1 0 2.03636885870546 48.6861947673589
+6  10 1 0
+6  11 2 5
+6  12 3 7
+0
+
+0101000
+-69 0 +71 0 *
+Ve
+1.01e-007
+89283.9468571811 37551.2740274402 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  6 0 4.63299020378047 4.7134544916583
+2  10 6 0 4.63299020378047 4.7134544916583
+2  11 1 0 4.63299020378047 4.7134544916583
+6  13 1 0
+6  14 2 5
+6  15 3 7
+0
+
+0101000
+-67 0 +69 0 *
+Ve
+1.01e-007
+89329.2817937255 37549.6564945101 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  7 0 1.50951989137392 46.8733294770098
+2  12 7 0 1.50951989137392 46.8733294770098
+2  13 1 0 1.50951989137392 46.8733294770098
+6  16 1 0
+6  17 2 5
+6  18 3 7
+0
+
+0101000
+-65 0 +67 0 *
+Ve
+1.02700581647779e-007
+89333.9227134509 37549.3253906006 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  8 0 6.17302589269058 6.24971734728608
+2  14 8 0 6.17302589269058 6.24971734728608
+2  15 1 0 6.17302589269058 6.24971734728608
+6  19 1 0
+6  20 2 5
+6  21 3 7
+0
+
+0101000
+-63 0 +65 0 *
+Ve
+1.01e-007
+89378.3760312151 37544.5599661653 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  9 0 1.43866994036818 46.1665035080152
+2  16 9 0 1.43866994036818 46.1665035080152
+2  17 1 0 1.43866994036818 46.1665035080152
+6  22 1 0
+6  23 2 5
+6  24 3 7
+0
+
+0101000
+-61 0 +63 0 *
+Ve
+1.32781756908256e-007
+89381.4048214367 37544.3436540027 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  10 0 6.19927063496233 6.32778154013641
+2  18 10 0 6.19927063496233 6.32778154013641
+2  19 1 0 6.19927063496233 6.32778154013641
+6  25 1 0
+6  26 2 5
+6  27 3 7
+0
+
+0101000
+-59 0 +61 0 *
+Ve
+1.01e-007
+89426.1232448348 37542.748376156 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  11 0 2.41290110122088 47.2937745216901
+2  20 11 0 2.41290110122088 47.2937745216901
+2  21 1 0 2.41290110122088 47.2937745216901
+6  28 1 0
+6  29 2 5
+6  30 3 7
+0
+
+0101000
+-57 0 +59 0 *
+Ve
+1.01e-007
+89427.5687500744 37542.72265625 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  12 0 3.16298481126905 3.22540236132228
+2  22 12 0 3.16298481126905 3.22540236132228
+2  23 1 0 3.16298481126905 3.22540236132228
+6  31 1 0
+6  32 2 5
+6  33 3 7
+0
+
+0101000
+-55 0 +57 0 *
+Ve
+1.01e-007
+89464.3562015587 37542.72265625 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  13 0 1.17070917344763 37.9706273121035
+2  24 13 0 1.17070917344763 37.9706273121035
+2  25 1 0 1.17070917344763 37.9706273121035
+6  34 1 0
+6  35 2 5
+6  36 3 7
+0
+
+0101000
+-53 0 +55 0 *
+Ve
+1.04412372155159e-007
+89465.5815146193 37542.7758579889 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  14 0 6.20009588731763 6.29065056964209
+2  26 14 0 6.20009588731763 6.29065056964209
+2  27 1 0 6.20009588731763 6.29065056964209
+6  37 1 0
+6  38 2 5
+6  39 3 7
+0
+
+0101000
+-51 0 +53 0 *
+Ve
+1.00000017763568e-007
+181.711834649751 22.532273390006 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  15 0 1.69906146770723 36.1359913888135
+2  28 15 0 1.69906146770723 36.1359913888135
+2  29 1 0 1.69906146770723 36.1359913888135
+0
+
+0101000
++51 0 -49 3 *
+Ve
+1e-007
+89498.34375 37543.18359375 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  16 0 0 3.00362589860391
+2  30 16 0 0 3.00362589860391
+2  31 1 0 0 3.00362589860391
+0
+
+0101000
++47 0 -49 3 *
+Ve
+1e-007
+89495.390625 37525.44921875 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  17 0 0 17.978570685854
+6  40 4 0
+2  32 16 0 0 17.978570685854
+2  33 1 0 0 17.978570685854
+6  41 2 5
+6  42 5 5
+6  43 6 7
+6  44 3 7
+0
+
+0101000
++45 0 -47 0 *
+Ve
+1e-007
+89499.078125 37510.67578125 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  18 0 0 15.2266907703679
+6  45 4 0
+2  34 16 0 0 15.2266907703679
+2  35 1 0 0 15.2266907703679
+6  46 2 5
+6  47 5 5
+6  48 6 7
+6  49 3 7
+0
+
+0101000
++43 0 -45 0 *
+Ve
+1e-007
+89505.734375 37501.80859375 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  19 0 0 11.0875009908751
+6  50 4 0
+2  36 16 0 0 11.0875009908751
+2  37 1 0 0 11.0875009908751
+6  51 2 5
+6  52 5 5
+6  53 6 7
+6  54 3 7
+0
+
+0101000
++41 0 -43 0 *
+Ve
+1.00000012434498e-007
+199.646821047036 -26.2548662590156 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  20 0 2.89065499573297 15.91176930658
+2  38 16 0 2.89065499573297 15.91176930658
+2  39 1 0 2.89065499573297 15.91176930658
+0
+
+0101000
++39 3 -41 0 *
+Ve
+1.01e-007
+89507.7881764553 37496.2559767553 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  21 0 0.29070807495669 10.3520066224579
+2  40 17 0 0.29070807495669 10.3520066224579
+2  41 1 0 0.29070807495669 10.3520066224579
+0
+
+0101000
++37 0 -39 3 *
+Ve
+1.01e-007
+89507.5949811745 37496.2406843392 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  22 0 0.0712384683385669 0.0867425884251073
+2  42 18 0 0.0712384683385669 0.0867425884251073
+2  43 1 0 0.0712384683385669 0.0867425884251073
+6  55 1 0
+6  56 2 5
+6  57 3 7
+0
+
+0101000
++35 0 -37 0 *
+Ve
+1.04412372155159e-007
+89469.9132071214 37492.9638469869 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  23 0 1.69906146770723 39.5230453777003
+2  44 15 0 1.69906146770723 39.5230453777003
+2  45 1 0 1.69906146770723 39.5230453777003
+6  58 1 0
+6  59 2 5
+6  60 3 7
+0
+
+0101000
++33 0 -35 0 *
+Ve
+1.01e-007
+89464.3562015579 37492.72265625 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  24 0 6.20009588731763 6.29065056964209
+2  46 14 0 6.20009588731763 6.29065056964209
+2  47 1 0 6.20009588731763 6.29065056964209
+6  61 1 0
+6  62 2 5
+6  63 3 7
+0
+
+0101000
++31 0 -33 0 *
+Ve
+1.01e-007
+89427.5687500736 37492.72265625 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  25 0 1.17070917344763 37.9706273121035
+2  48 13 0 1.17070917344763 37.9706273121035
+2  49 1 0 1.17070917344763 37.9706273121035
+6  64 1 0
+6  65 2 5
+6  66 3 7
+0
+
+0101000
++29 0 -31 0 *
+Ve
+1.01e-007
+89424.3406867745 37492.7801613914 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  26 0 3.16298481126905 3.22540236132228
+2  50 12 0 3.16298481126905 3.22540236132228
+2  51 1 0 3.16298481126905 3.22540236132228
+6  67 1 0
+6  68 2 5
+6  69 3 7
+0
+
+0101000
++27 0 -29 0 *
+Ve
+1.32781756908256e-007
+89379.6222633764 37494.3754392381 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  27 0 2.41290110122088 47.2937745216901
+2  52 11 0 2.41290110122088 47.2937745216901
+2  53 1 0 2.41290110122088 47.2937745216901
+6  70 1 0
+6  71 2 5
+6  72 3 7
+0
+
+0101000
++25 0 -27 0 *
+Ve
+1.01e-007
+89373.0465346022 37494.8448128833 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  28 0 6.19927063496233 6.32778154013641
+2  54 10 0 6.19927063496233 6.32778154013641
+2  55 1 0 6.19927063496233 6.32778154013641
+6  73 1 0
+6  74 2 5
+6  75 3 7
+0
+
+0101000
++23 0 -25 0 *
+Ve
+1.02700581647779e-007
+89328.593216838 37499.6102373186 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  29 0 1.43866994036818 46.1665035080152
+2  56 9 0 1.43866994036818 46.1665035080152
+2  57 1 0 1.43866994036818 46.1665035080152
+6  76 1 0
+6  77 2 5
+6  78 3 7
+0
+
+0101000
++21 0 -23 0 *
+Ve
+1.01e-007
+89327.4989475953 37499.6882900229 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  30 0 6.17302589269058 6.24971734728608
+2  58 8 0 6.17302589269058 6.24971734728608
+2  59 1 0 6.17302589269058 6.24971734728608
+6  79 1 0
+6  80 2 5
+6  81 3 7
+0
+
+0101000
++19 0 -21 0 *
+Ve
+1.01e-007
+89282.1640110509 37501.3058229529 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  31 0 1.50951989137392 46.8733294770098
+2  60 7 0 1.50951989137392 46.8733294770098
+2  61 1 0 1.50951989137392 46.8733294770098
+6  82 1 0
+6  83 2 5
+6  84 3 7
+0
+
+0101000
++17 0 -19 0 *
+Ve
+1.01e-007
+89279.1803733559 37501.4105594976 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  32 0 4.63299020378047 4.7134544916583
+2  62 6 0 4.63299020378047 4.7134544916583
+2  63 1 0 4.63299020378047 4.7134544916583
+6  85 1 0
+6  86 2 5
+6  87 3 7
+0
+
+0101000
++15 0 -17 0 *
+Ve
+1.06940469647803e-007
+89232.7051760402 37503.0151554346 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  33 0 2.03636885870546 48.6861947673589
+2  64 5 0 2.03636885870546 48.6861947673589
+2  65 1 0 2.03636885870546 48.6861947673589
+6  88 1 0
+6  89 2 5
+6  90 3 7
+0
+
+0101000
++13 0 -15 0 *
+Ve
+1.01e-007
+89231.3631735545 37502.9887841253 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  34 0 3.06013299387935 3.16863276965656
+2  66 4 0 3.06013299387935 3.16863276965656
+2  67 1 0 3.06013299387935 3.16863276965656
+6  91 1 0
+6  92 2 5
+6  93 3 7
+0
+
+0101000
++11 0 -13 0 *
+Ve
+2.19534980935138e-007
+89190.9315751005 37499.9937252806 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  35 0 4.13578645578815 44.8394426351874
+2  68 3 0 4.13578645578815 44.8394426351874
+2  69 1 0 4.13578645578815 44.8394426351874
+6  94 1 0
+6  95 2 5
+6  96 3 7
+0
+
+0101000
++9 0 -11 0 *
+Ve
+1.01e-007
+89182.0704940043 37499.4541284282 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  36 0 3.04435791006513 3.26404534765663
+2  70 2 0 3.04435791006513 3.26404534765663
+2  71 1 0 3.04435791006513 3.26404534765663
+6  97 1 0
+6  98 2 5
+6  99 3 7
+0
+
+0101000
++7 0 -9 0 *
+Ve
+1.00000014210855e-007
+-162.511862415353 -25.0318792012376 0
+0 0
+
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  37 0 5.76340538448784 32.4203436774647
+2  72 1 0 5.76340538448784 32.4203436774647
+0
+
+0101000
++5 3 -7 0 *
+Ed
+ 1e-007 1 1 0
+1  38 0 127.86160731237 182.257163443736
+2  73 19 0 127.86160731237 182.257163443736
+2  74 1 0 127.86160731237 182.257163443736
+0
+
+0101000
++78 3 -5 3 *
+Wi
+
+0101100
+-76 2 -74 2 -72 2 -70 2 -68 2 -66 2 -64 2 -62 2 -60 2 -58 2 
+-56 2 -54 2 -52 2 -50 2 -48 2 +46 2 +44 2 +42 2 +40 2 +38 2 
++36 2 +34 2 +32 2 +30 2 +28 2 +26 2 +24 2 +22 2 +20 2 +18 2 
++16 2 +14 2 +12 2 +10 2 +8 2 +6 2 +4 2 +3 2 *
+Fa
+0  1e-007 1 2
+
+0111000
++2 0 *
+
++1 1 
+0
+
index 27ab51a422baef58c3983b547bc36d9e96865116..202d1a7137356ca2a1f9ea1b270b70121d6837a6 100644 (file)
@@ -125,7 +125,7 @@ void test_HYDROData_Bathymetry::testFileImport()
   if ( !createTestFile( aFileName ) )
     return; // No file has been created
 
-  CPPUNIT_ASSERT( aBathymetry->ImportFromFile( aFileName.toStdString().c_str() ) );
+  CPPUNIT_ASSERT( aBathymetry->ImportFromFiles( QStringList(aFileName)) );
 
   HYDROData_Bathymetry::AltitudePoints anAltitudePoints = aBathymetry->GetAltitudePoints();
   CPPUNIT_ASSERT_EQUAL( 2300, (int)anAltitudePoints.size() );
@@ -171,7 +171,7 @@ void test_HYDROData_Bathymetry::testCopy()
   
   if ( anIsFileCreated )
   {
-    CPPUNIT_ASSERT( aBathymetry1->ImportFromFile( aFileName.toStdString().c_str() ) );
+    CPPUNIT_ASSERT( aBathymetry1->ImportFromFiles( QStringList(aFileName ) ) );
 
     HYDROData_Bathymetry::AltitudePoints anAltitudePoints = aBathymetry1->GetAltitudePoints();
     CPPUNIT_ASSERT_EQUAL( 2300, (int)anAltitudePoints.size() );
diff --git a/src/HYDRO_tests/test_HYDROData_CalcCase.cxx b/src/HYDRO_tests/test_HYDROData_CalcCase.cxx
new file mode 100644 (file)
index 0000000..42ad373
--- /dev/null
@@ -0,0 +1,104 @@
+// Copyright (C) 2014-2015  EDF-R&D
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include <test_HYDROData_CalcCase.h>
+#include <HYDROData_CalculationCase.h>
+#include <HYDROData_Document.h>
+#include <HYDROData_Tool.h>
+#include <TopoDS_Edge.hxx>
+#include <TopoDS_Wire.hxx>
+#include <TopoDS_Face.hxx>
+#include <TopoDS.hxx>
+#include <TestViewer.h>
+#include <TestShape.h>
+#include <TopTools_ListOfShape.hxx>
+#include <AIS_DisplayMode.hxx>
+#include <Aspect_ColorScale.hxx>
+#include <QString>
+#include <QColor>
+#include <BRep_Builder.hxx>
+#include <BRepTools.hxx>
+
+
+const QString REF_DATA_PATH = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test";
+
+
+void test_HYDROData_CalcCase::test_add_int_wires()
+{
+  {
+    TopoDS_Shape out;
+    TopTools_ListOfShape Wires;
+
+    BRep_Builder B;
+    TopoDS_Shape InF;
+    TopoDS_Shape InP;
+    BRepTools::Read(InP, (REF_DATA_PATH + "/p1.brep").toStdString().c_str(), B);
+    BRepTools::Read(InF, (REF_DATA_PATH + "/r2.brep").toStdString().c_str(), B);
+    Wires.Append(InP);
+
+    TopTools_ListOfShape OutSh;
+    HYDROData_SplitToZonesTool::CutByEdges(InF, Wires, OutSh);
+    CPPUNIT_ASSERT_EQUAL(2, OutSh.Extent());
+    TopoDS_Compound cmp;
+    B.MakeCompound(cmp);
+    B.Add(cmp, OutSh.First());
+    B.Add(cmp, OutSh.Last());
+    TestViewer::show( cmp, AIS_Shaded, true, "cc_int_w_1" );
+    //CPPUNIT_ASSERT_IMAGES
+  }
+
+  {
+    TopoDS_Shape out;
+    TopTools_ListOfShape Wires;
+
+    BRep_Builder B;
+    TopoDS_Shape InF;
+    TopoDS_Shape InP;
+    BRepTools::Read(InP, (REF_DATA_PATH + "/p2.brep").toStdString().c_str(), B);
+    BRepTools::Read(InF, (REF_DATA_PATH + "/r2.brep").toStdString().c_str(), B);
+    Wires.Append(InP);
+
+    TopTools_ListOfShape OutSh;
+    HYDROData_SplitToZonesTool::CutByEdges(InF, Wires, OutSh);
+    CPPUNIT_ASSERT_EQUAL(1, OutSh.Extent());
+    TestViewer::show( OutSh.First(), AIS_WireFrame, true, "cc_int_w_2" );
+    //CPPUNIT_ASSERT_IMAGES
+  }
+
+  {
+    TopoDS_Shape out;
+    TopTools_ListOfShape Wires;
+
+    BRep_Builder B;
+    TopoDS_Shape InF;
+    TopoDS_Shape InP;
+    BRepTools::Read(InP, (REF_DATA_PATH + "/p3.brep").toStdString().c_str(), B);
+    BRepTools::Read(InF, (REF_DATA_PATH + "/r2.brep").toStdString().c_str(), B);
+    Wires.Append(InP);
+
+    TopTools_ListOfShape OutSh;
+    HYDROData_SplitToZonesTool::CutByEdges(InF, Wires, OutSh);
+    CPPUNIT_ASSERT_EQUAL(1, OutSh.Extent());
+    TestViewer::show( OutSh.First(), AIS_WireFrame, true, "cc_int_w_3" );
+    CPPUNIT_ASSERT_IMAGES
+  }
+
+}
+
+
+
diff --git a/src/HYDRO_tests/test_HYDROData_CalcCase.h b/src/HYDRO_tests/test_HYDROData_CalcCase.h
new file mode 100644 (file)
index 0000000..c4dbda7
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright (C) 2014-2015  EDF-R&D
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifdef WIN32
+  #pragma warning( disable: 4251 )
+#endif
+
+#include <cppunit/extensions/HelperMacros.h>
+#define SHP_TESTS
+
+class test_HYDROData_CalcCase : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( test_HYDROData_CalcCase );
+  CPPUNIT_TEST( test_add_int_wires );
+
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void test_add_int_wires();
+
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION( test_HYDROData_CalcCase );
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( test_HYDROData_CalcCase, "HYDROData_CalcCase" );
+
+#ifdef WIN32
+  #pragma warning( default: 4251 )
+#endif
index 895a52b601a3cc7bd619854a5a3cd6ab4c55ab03..8b0fed78a6f510b004093cce123c32c603c17658 100644 (file)
 #include <BRepTools.hxx>
 #include <BRep_Builder.hxx>
 #include <BRepCheck_Analyzer.hxx>
+#include <OSD_Timer.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
 
 #define _DEVDEBUG_
 #include "HYDRO_trace.hxx"
 
-const QString REF_DATA_PATH = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test/HYDRO";
+const QString REF_DATA_PATH = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test";
 const QString DEF_STR_PATH = qgetenv( "HYDRO_ROOT_DIR" ) + "/share/salome/resources/hydro/def_strickler_table.txt";
 
 void test_HYDROData_LandCoverMap::test_add_2_objects()
@@ -1145,3 +1147,134 @@ void test_HYDROData_LandCoverMap::test_copy()
 
   aDoc->Close();
 }
+
+void test_HYDROData_LandCoverMap::test_shp_clc_classification_perf()
+{
+  Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
+  QString aFileName = REF_DATA_PATH + "/CLC_decoupe.shp";
+  HYDROData_ShapeFile anImporter;
+  QStringList PolygonList;
+  TopTools_SequenceOfShape PolygonFaces;
+  int Type = -1;
+  int aStat = anImporter.ImportPolygons(aDoc, aFileName, PolygonList, PolygonFaces, Type);
+  CPPUNIT_ASSERT(aStat == 1);
+  CPPUNIT_ASSERT_EQUAL(5, Type);
+  CPPUNIT_ASSERT_EQUAL(625, PolygonFaces.Length());
+  
+  Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
+  HYDROData_MapOfFaceToStricklerType aMapFace2ST;
+
+#ifdef NDEBUG
+  int SI = 100;
+  int EI = 300;
+#else
+  int SI = 150;
+  int EI = 200;
+#endif
+
+  for ( int i = SI; i <= EI; i++ )
+  {
+    TopoDS_Shape aShape = PolygonFaces(i);
+    if ( aShape.IsNull() ) 
+      continue;
+    aMapFace2ST.Add( TopoDS::Face( aShape ), "ST_" + QString::number(i) );
+  }
+
+  LCM->StoreLandCovers(aMapFace2ST);
+
+  std::vector<gp_XY> pnts;
+#ifdef NDEBUG
+  int N = 1000; //1000*1000 points; uniform distribution for release mode
+#else
+  int N = 100;
+#endif
+
+  pnts.reserve(N);
+  double x0 = 448646.91897505691;
+  double x1 = 487420.3990381231;
+  double y0 = 6373566.5122489957;
+  double y1 = 6392203.4117361344;
+  for (size_t i=0; i < N; i++)
+  {
+    for (size_t j=0; j < N; j++)
+    {
+      double px = x0 + (x1-x0)*((double)i/(double)N);
+      double py = y0 + (y1-y0)*((double)j/(double)N);
+      pnts.push_back(gp_XY(px,py));
+    }
+  }
+  OSD_Timer aTimer;
+  std::vector<std::set <QString> > TRes;  
+  aTimer.Start();
+  LCM->ClassifyPoints(pnts, TRes);
+  aTimer.Stop();
+#ifdef NDEBUG
+  CPPUNIT_ASSERT( aTimer.ElapsedTime() < 1.4);
+  aTimer.Show();
+#endif
+}
+
+void test_HYDROData_LandCoverMap::test_shp_clc_classification_check()
+{
+  Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
+  QString aFileName = REF_DATA_PATH + "/CLC_decoupe.shp";
+  HYDROData_ShapeFile anImporter;
+  QStringList PolygonList;
+  TopTools_SequenceOfShape PolygonFaces;
+  int Type = -1;
+  int aStat = anImporter.ImportPolygons(aDoc, aFileName, PolygonList, PolygonFaces, Type);
+  CPPUNIT_ASSERT(aStat == 1);
+  Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
+  HYDROData_MapOfFaceToStricklerType aMapFace2ST;
+
+  aMapFace2ST.Add( TopoDS::Face( PolygonFaces(172) ), "Tissu urbain continu" );
+  aMapFace2ST.Add( TopoDS::Face( PolygonFaces(179) ), "Aéroports" );
+  aMapFace2ST.Add( TopoDS::Face( PolygonFaces(185) ), "Rizières" );
+  aMapFace2ST.Add( TopoDS::Face( PolygonFaces(187) ), "Vignobles" );
+  aMapFace2ST.Add( TopoDS::Face( PolygonFaces(190) ), "Oliveraies" );
+  aMapFace2ST.Add( TopoDS::Face( PolygonFaces(196) ), "Estuaires" );
+  
+  LCM->StoreLandCovers(aMapFace2ST);
+
+  TopoDS_Shape Sh = LCM->GetShape();
+
+  std::vector<gp_XY> pnts;
+  pnts.push_back(gp_XY(0,0));
+
+  pnts.push_back(gp_XY(468380, 6382300));
+  pnts.push_back(gp_XY(468380, 6382900));
+  pnts.push_back(gp_XY(468380, 6383200));
+  pnts.push_back(gp_XY(468250, 6384700));
+  pnts.push_back(gp_XY(470350, 6384700));
+  pnts.push_back(gp_XY(469279.642874048, 6385132.45048612 ));
+
+  std::vector<std::set <QString> > TRes;  
+  LCM->ClassifyPoints(pnts, TRes);
+
+  CPPUNIT_ASSERT (TRes[0].empty());
+  CPPUNIT_ASSERT (TRes[1].empty());
+  CPPUNIT_ASSERT (TRes[2].empty());
+  CPPUNIT_ASSERT_EQUAL (*TRes[3].begin(), QString("Estuaires"));
+  CPPUNIT_ASSERT_EQUAL (*TRes[4].begin(), QString("Oliveraies"));
+  CPPUNIT_ASSERT_EQUAL (*TRes[5].begin(), QString("Vignobles"));
+
+  //std::less comparator; so compare first and second elem safely
+  CPPUNIT_ASSERT_EQUAL (*TRes[6].begin(), QString("Estuaires"));
+  CPPUNIT_ASSERT_EQUAL (*(++TRes[6].begin()), QString("Tissu urbain continu"));
+
+  ///
+  Handle(HYDROData_StricklerTable) aTable = Handle(HYDROData_StricklerTable)::DownCast( aDoc->CreateObject( KIND_STRICKLER_TABLE ) );
+  CPPUNIT_ASSERT_EQUAL( true, aTable->Import( DEF_STR_PATH ) );
+  std::vector<double> coeffs;
+  LCM->ClassifyPoints(pnts, aTable, coeffs, 0.0, true);
+
+  CPPUNIT_ASSERT_EQUAL (coeffs[0], 0.0);
+  CPPUNIT_ASSERT_EQUAL (coeffs[1], 0.0);
+  CPPUNIT_ASSERT_EQUAL (coeffs[2], 0.0);
+  CPPUNIT_ASSERT_EQUAL (coeffs[3], 1.0522);
+  CPPUNIT_ASSERT_EQUAL (coeffs[4], 1.0223);
+  CPPUNIT_ASSERT_EQUAL (coeffs[5], 1.0221);
+  CPPUNIT_ASSERT_EQUAL (coeffs[6], 1.0522);
+
+}
+
index 85d34bc750777bbf0467e9ec53003ff74dbd349b..c473c4a1a3f858c0034e5c957eb50f3f389e6bd5 100644 (file)
@@ -50,6 +50,8 @@ class test_HYDROData_LandCoverMap : public CppUnit::TestFixture
   CPPUNIT_TEST( test_shp_import_clc_dec );
   CPPUNIT_TEST( test_shp_import_nld_areas );
   CPPUNIT_TEST( test_shp_loop_back );
+  CPPUNIT_TEST( test_shp_clc_classification_perf );
+  CPPUNIT_TEST( test_shp_clc_classification_check );
 #endif
   CPPUNIT_TEST_SUITE_END();
 
@@ -77,6 +79,8 @@ public:
   void test_shp_loop_back();
   void test_export_telemac();
   void test_copy();
+  void test_shp_clc_classification_perf();
+  void test_shp_clc_classification_check();
 };
 
 CPPUNIT_TEST_SUITE_REGISTRATION( test_HYDROData_LandCoverMap );
index b4007ceaab6b03cbaab3386bb72d37b7f12274aa..752811948dccf863a0a47f3764804645e97f23c3 100644 (file)
@@ -21,7 +21,7 @@
 #include <QStringList>
 #include <vector>
 
-const QString REF_PATH = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test/HYDRO";
+const QString REF_PATH = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test";
 
 bool test_HYDROData_ShapeFile::compare_two_files(const QString& File1, const QString& File2)
 {