Salome HOME
Merge branch 'BR_MULTI_BATHS' into HEAD
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ImportSinusXOp.cxx
index 291338a0ed5b536e382a3e04fdf0db69e443282c..4f30e80256c3ee52da222e821eadd0570ff4b6b4 100644 (file)
@@ -1,8 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
+// 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
@@ -25,7 +21,7 @@
 #include "HYDROGUI_DataModel.h"
 #include "HYDROGUI_Module.h"
 #include "HYDROGUI_UpdateFlags.h"
-#include "HYDROGUI_Tool.h"
+#include "HYDROGUI_Tool2.h"
 #include <HYDROData_PolylineXY.h>
 #include <HYDROData_Polyline3D.h>
 #include <HYDROGUI_DataObject.h>
@@ -43,6 +39,8 @@
 #include <QFileInfo>
 #include <QMessageBox>
 
+#include <HYDROData_SinusX.h>
+
 
 HYDROGUI_ImportSinusXOp::HYDROGUI_ImportSinusXOp( HYDROGUI_Module* theModule )
 : HYDROGUI_Operation( theModule )
@@ -77,236 +75,54 @@ void HYDROGUI_ImportSinusXOp::onApply()
     return;
   }
 
-  QString aFileName = myFileDlg->selectedFile();
-  if ( aFileName.isEmpty() )
-  {
-    abort();
-    return;
-  }
-
-  QString anExt = aFileName.split('.', QString::SkipEmptyParts).back();
+  QStringList aFileNames = myFileDlg->selectedFiles();
+  bool IsImported = false;
+  
+  QApplication::setOverrideCursor( Qt::WaitCursor );  
+  startDocOperation();
 
-  if (anExt == "sx")
+  foreach (QString aFileName, aFileNames) 
   {
-    QFile aFile (aFileName);
-    aFile.open(QIODevice::ReadOnly);
-
-    Parse(aFile);
+    if ( aFileName.isEmpty() )
+      continue;
 
-    QApplication::setOverrideCursor( Qt::WaitCursor );
+    QString anExt = aFileName.split('.', QString::SkipEmptyParts).back();
 
-    startDocOperation();
-
-    ProcessSX();
+    if (anExt == "sx")
+    {
+      HYDROData_SinusX aSinusXImporter;
+      NCollection_Sequence<Handle_HYDROData_Entity> anEntities;
+      if (aSinusXImporter.Import(aFileName, doc(), anEntities)) 
+      {
+        UpdateView(anEntities);
+        IsImported = true;
+      }
+    }
+  }
 
+  if (IsImported)
+  {
     commitDocOperation();
     commit();
-    aFile.close();
   }
+  else
+    abort();
 
-  module()->update( UF_Model | UF_VTKViewer | UF_VTK_Forced | UF_VTK_Init );
-  
+  module()->update( UF_Model | UF_VTKViewer | UF_OCCViewer );  
   QApplication::restoreOverrideCursor();
 }
 
-void HYDROGUI_ImportSinusXOp::ProcessSX()
+void HYDROGUI_ImportSinusXOp::UpdateView( NCollection_Sequence<Handle_HYDROData_Entity>& anEntities)
 {
-  /*Handle(HYDROData_PolylineXY) aPolylineXY = Handle(HYDROData_PolylineXY)::DownCast( doc()->CreateObject( KIND_POLYLINEXY ) );
-
-  Handle(HYDROData_Polyline3D) aPolylineObj = Handle(HYDROData_Polyline3D)::DownCast( doc()->CreateObject( KIND_POLYLINE ) );
-  */
-  //TODO - move to hydro data
-  std::vector<Handle(HYDROData_Entity)> anEntities;
-  for ( int i = 0; i < myCurveBlocks.size(); i++ )
-  {
-    if (myCurveBlocks[i].myType == 4) ///  scatter plot -> to bathy
-    {
-      Handle(HYDROData_Bathymetry) aBath = Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) );
-      HYDROData_Bathymetry::AltitudePoints aAPoints;
-      for (int j = 0; j < myCurveBlocks[i].myXYZPoints.size(); j++)
-        aAPoints.Append(gp_XYZ (myCurveBlocks[i].myXYZPoints[j]));
-
-      aBath->SetAltitudePoints(aAPoints);
-      aBath->SetName(myCurveBlocks[i].myName);
-      anEntities.push_back(aBath);
-    }
-    if (myCurveBlocks[i].myType == 1 || myCurveBlocks[i].myType == 3)
-    {
-      NCollection_Sequence<gp_XYZ> aPoints;
-      for (int j = 0; j < myCurveBlocks[i].myXYZPoints.size(); j++)
-        aPoints.Append(gp_XYZ (myCurveBlocks[i].myXYZPoints[j]));
-      if (myCurveBlocks[i].myIsClosed)
-        aPoints.Append(gp_XYZ (myCurveBlocks[i].myXYZPoints[0]));
-      Handle(HYDROData_ProfileUZ) aProfileUZ = Handle(HYDROData_ProfileUZ)::DownCast( doc()->CreateObject( KIND_PROFILEUZ ) );
-      Handle(HYDROData_PolylineXY) aPolyXY = Handle(HYDROData_PolylineXY)::DownCast( doc()->CreateObject( KIND_POLYLINEXY ) );
-      aPolyXY->AddSection( "",  myCurveBlocks[i].myIsSpline ? HYDROData_PolylineXY::SECTION_SPLINE : HYDROData_PolylineXY::SECTION_POLYLINE, false ); 
-      aProfileUZ->CalculateAndAddPoints(aPoints, aPolyXY);
-      Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( doc()->CreateObject( KIND_PROFILE ) );
-      aProfile->SetParametricPoints(aProfileUZ->GetPoints());
-      aPolyXY->SetName(myCurveBlocks[i].myName + "_polyXY");
-      aProfileUZ->SetName(myCurveBlocks[i].myName + "_profileUZ");
-      aProfile->SetName(myCurveBlocks[i].myName + "_profile");
-      anEntities.push_back(aPolyXY);
-      anEntities.push_back(aProfileUZ);
-      anEntities.push_back(aProfile);
-    }
-    if (myCurveBlocks[i].myType == 2)
-    {
-      if (myCurveBlocks[i].myCurvePlane == 2)
-      {
-        if (myCurveBlocks[i].myAdditionalCurveInfo.size() == 4)
-        {
-          Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( doc()->CreateObject( KIND_PROFILE ) );
-          HYDROData_ProfileUZ::PointsList aPointList;
-          for (int j = 0; j < myCurveBlocks[i].myXYZPoints.size(); j++)
-            aPointList.Append(gp_XY (myCurveBlocks[i].myXYZPoints[j].X(), myCurveBlocks[i].myXYZPoints[j].Z()));
-           
-          aProfile->SetParametricPoints(aPointList);
-          if ( ! (myCurveBlocks[i].myAdditionalCurveInfo[0] == 0 &&  myCurveBlocks[i].myAdditionalCurveInfo[1] == 0 && 
-            myCurveBlocks[i].myAdditionalCurveInfo[2] == 0 && myCurveBlocks[i].myAdditionalCurveInfo[3] == 0) )
-          {
-            aProfile->SetLeftPoint(gp_XY(myCurveBlocks[i].myAdditionalCurveInfo[0], myCurveBlocks[i].myAdditionalCurveInfo[1]));
-            aProfile->SetRightPoint(gp_XY(myCurveBlocks[i].myAdditionalCurveInfo[2], myCurveBlocks[i].myAdditionalCurveInfo[3]));
-            aProfile->Update();
-          }
-          aProfile->SetName(myCurveBlocks[i].myName + "_profile");
-          anEntities.push_back(aProfile);
-        }
-      }
-      if (myCurveBlocks[i].myCurvePlane == 0)
-      {
-         Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( doc()->CreateObject( KIND_PROFILE ) );
-         HYDROData_Profile::ProfilePoints aPointList;
-         for (int j = 0; j < myCurveBlocks[i].myXYZPoints.size(); j++)
-           aPointList.Append(myCurveBlocks[i].myXYZPoints[j]);
-         aProfile->SetProfilePoints(aPointList);
-         aProfile->SetName(myCurveBlocks[i].myName + "_profile");
-         anEntities.push_back(aProfile);
-      }
-    }
-  }
-
-  /////
-
   size_t anActiveViewId = HYDROGUI_Tool::GetActiveGraphicsViewId( module() );
   if ( anActiveViewId == 0 )
-    anActiveViewId = HYDROGUI_Tool::GetActiveOCCViewId( module() );
+    anActiveViewId = HYDROGUI_Tool::GetActiveViewId( module() );
 
-  for (int i = 0; i < anEntities.size() ; i++)
+  for (int i = 1; i <= anEntities.Size() ; i++)
   {
-    anEntities[i]->Update();
-    module()->setObjectVisible( anActiveViewId, anEntities[i], true );
-    module()->setIsToUpdate( anEntities[i] );
+    anEntities(i)->Update();
+    module()->setObjectVisible( anActiveViewId, anEntities(i), true );
+    module()->setIsToUpdate( anEntities(i) );
   }
 }
  
-
-
-
-bool HYDROGUI_ImportSinusXOp::Parse( QFile& theFile)
-{
-  if ( !theFile.isOpen() )
-    return false;
-
-  QString aLine;
-  QString aBLine;
-  QStringList aList;
-  QStringList aBList;
-  myCurveBlocks.clear();
-  bool aTotStat = true;
-
-  aLine = theFile.readLine().simplified();
-  aList = aLine.split( ' ', QString::SkipEmptyParts );
-
-  for (;!theFile.atEnd();) 
-  {
-    if (aList[0] == "B" && (aList[1] == "C" || aList[1] == "P" || aList[1] == "N" || aList[1] == "S" ))
-    {  
-      HYDROGUI_CurveBlock aCurveBlockInfo;
-      if (aList[1] == "C")
-        aCurveBlockInfo.myType = 1;
-      else if (aList[1] == "P")
-        aCurveBlockInfo.myType = 2;
-      else if (aList[1] == "N")
-        aCurveBlockInfo.myType = 3;
-      else if (aList[1] == "S")
-        aCurveBlockInfo.myType = 4;
-
-      if (aList.size() == 9)
-      {
-        for (int j = 2; j < 8; j++)
-          aCurveBlockInfo.myRefCoords.push_back(aList[j].toDouble());
-        aCurveBlockInfo.myRefRatio = aList[8].toDouble();
-      }
-
-      QString Name;
-      do
-      {
-        aBLine = theFile.readLine().simplified();
-        aBList = aBLine.split( ' ', QString::SkipEmptyParts );
-         
-        if (aBList[0] == "CP")
-        {
-          if (aBList.size() == 2 && (aBList[1] == "0" || aBList[1] == "1" || aBList[1] == "2"))
-            aCurveBlockInfo.myCurvePlane = aBList[1].toInt();
-          else if (aBList.size() == 3 && (aBList[1] == "0" || aBList[1] == "1") && (aBList[2] == "0" || aBList[2] == "1"))
-          {
-            aCurveBlockInfo.myIsClosed = aBList[1].toInt();
-            aCurveBlockInfo.myIsSpline = aBList[2].toInt();
-          }
-          else
-          {
-            for (int j = 1; j < aBList.size(); j++)
-              aCurveBlockInfo.myAdditionalCurveInfo.push_back(aBList[j].toDouble());
-          }
-        }
-        if (aBList[0] == "CN")
-        {
-           for (int i = 1; i < aBList.size(); i++)
-             Name += aBList[i] + "_"; 
-           Name.remove(Name.size() - 1, 1);
-           aCurveBlockInfo.myName = Name;
-        }
-      } while (!theFile.atEnd() && aBLine[0] == 'C' );
-
-      bool aStat;
-      aTotStat = true;
-      do
-      {
-        if (aBList.size() >= 3 && aBLine[0] != 'B' && aBLine[0] != 'C') {
-          gp_XYZ anXYZ;
-          anXYZ.SetX (aBList[0].toDouble(&aStat));  
-          aTotStat = aTotStat && aStat;
-          anXYZ.SetY (aBList[1].toDouble(&aStat));
-          aTotStat = aTotStat && aStat;
-          anXYZ.SetZ (aBList[2].toDouble(&aStat));
-          aTotStat = aTotStat && aStat;
-
-          aCurveBlockInfo.myXYZPoints.push_back(anXYZ);
-          
-          aBLine = theFile.readLine().simplified();
-          aBList = aBLine.split( ' ', QString::SkipEmptyParts );
-        }
-        else 
-          break;
-    
-      } while (!theFile.atEnd() || !aBLine.isEmpty());
-      if (aTotStat)
-        myCurveBlocks.push_back(aCurveBlockInfo);
-
-      aLine = aBLine;
-      aList = aBList;
-
-    }
-    else
-    {
-      aLine = theFile.readLine().simplified();
-      aList = aLine.split( ' ', QString::SkipEmptyParts );
-    }
-
-  }
-
-  return true;
-
-}
-