X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ImportSinusXOp.cxx;h=38b5cf4cb14ebf1389c2fa81d81e76b30d58512f;hb=dfa894b758ac65080dc7185d25b7646dc45a10f4;hp=291338a0ed5b536e382a3e04fdf0db69e443282c;hpb=97893b85e4456b19844eb4f4e8738af7bd30aecf;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ImportSinusXOp.cxx b/src/HYDROGUI/HYDROGUI_ImportSinusXOp.cxx index 291338a0..38b5cf4c 100644 --- a/src/HYDROGUI/HYDROGUI_ImportSinusXOp.cxx +++ b/src/HYDROGUI/HYDROGUI_ImportSinusXOp.cxx @@ -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 #include #include @@ -43,6 +39,8 @@ #include #include +#include + HYDROGUI_ImportSinusXOp::HYDROGUI_ImportSinusXOp( HYDROGUI_Module* theModule ) : HYDROGUI_Operation( theModule ) @@ -61,7 +59,7 @@ void HYDROGUI_ImportSinusXOp::startOperation() myFileDlg = new SUIT_FileDlg( module()->getApp()->desktop(), true ); myFileDlg->setWindowTitle( getName() ); myFileDlg->setFileMode( SUIT_FileDlg::ExistingFiles ); - myFileDlg->setFilter( tr("SINUSX_FILTER") ); + myFileDlg->setNameFilter( tr("SINUSX_FILTER") ); connect( myFileDlg, SIGNAL( accepted() ), this, SLOT( onApply() ) ); connect( myFileDlg, SIGNAL( rejected() ), this, SLOT( onCancel() ) ); @@ -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 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& 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 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 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; - -} -