X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_SinusX.cxx;h=8f05a257c19fa75fff1725a527a614e3a86e4f6e;hb=bfb47f35b807312281b69a52494b9147c22759dd;hp=bca60482b95a9df268d6c5cf60ce1cd079f3db24;hpb=65fd90d35860bf1694056edc2ca502801de5cb1f;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_SinusX.cxx b/src/HYDROData/HYDROData_SinusX.cxx index bca60482..8f05a257 100644 --- a/src/HYDROData/HYDROData_SinusX.cxx +++ b/src/HYDROData/HYDROData_SinusX.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 @@ -36,6 +32,7 @@ #include #include #include +#include HYDROData_SinusX::HYDROData_SinusX( ) { @@ -303,3 +300,107 @@ bool HYDROData_SinusX::Parse(QFile& theFile) } +bool HYDROData_SinusX::Export(const QString& theFilePath, const NCollection_Sequence& theEntities) +{ + if ( theFilePath.isEmpty() ) + { + return false; + } + + QString anExt = theFilePath.split('.', QString::SkipEmptyParts).back(); + + if (anExt == "sx") + { + QFile aFile (theFilePath); + + aFile.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text); + + HydroToSX(aFile, theEntities); + + aFile.close(); + + return true; + } + else + return false; + +} + +void HYDROData_SinusX::HydroToSX(QFile& theFile, const NCollection_Sequence& theEntities) +{ + QTextStream aTextStream(&theFile); + aTextStream << "C Generated by HYDRO Module\n"; + aTextStream << "C\n"; + + for (int i = 1; i <= theEntities.Size(); i++) + { + Handle_HYDROData_Entity anEnt = theEntities.Value(i); + if (anEnt->IsKind( STANDARD_TYPE(HYDROData_Bathymetry) )) + { + Handle(HYDROData_Bathymetry) aBathy = Handle(HYDROData_Bathymetry)::DownCast( anEnt ); + HYDROData_Bathymetry::AltitudePoints anXYZPoints = aBathy->GetAltitudePoints(true); + //Write to stream + aTextStream << "B S\n"; + aTextStream << "CN " << aBathy->GetName() << "\n"; + aTextStream << "CP 0 0\n"; + aTextStream << "CP 0\n"; + for (int j = anXYZPoints.Lower(); j <= anXYZPoints.Upper(); j++) + aTextStream << " " << QString::number(anXYZPoints(j).X(), 'f', 3) + << " " << QString::number(anXYZPoints(j).Y(), 'f', 3) + << " " << QString::number(anXYZPoints(j).Z(), 'f', 3) << "\n"; + } + else if (anEnt->IsKind( STANDARD_TYPE(HYDROData_PolylineXY) )) + { + Handle(HYDROData_PolylineXY) aPolyXY = Handle(HYDROData_PolylineXY)::DownCast( anEnt ); + for (int j = 0; j < aPolyXY->NbSections(); j++) + { + //Collect data + bool IsClosed = aPolyXY->IsClosedSection(j); + bool IsSpline = false; + if (aPolyXY->GetSectionType(j) == HYDROData_PolylineXY::SECTION_SPLINE) + IsSpline = true; + HYDROData_PolylineXY::PointsList anXYPoints = aPolyXY->GetPoints(j, true); + //Write to stream + aTextStream << "B N\n"; + aTextStream << "CN " << aPolyXY->GetName() << "\n"; + aTextStream << "CP " << IsClosed << " " << IsSpline << "\n"; + aTextStream << "CP 0.0\n"; + aTextStream << "CP 0\n"; + if (aPolyXY->NbSections() > 1) + aTextStream << "C " << aPolyXY->GetName() << "_section_" << QString::number(j) << "\n"; + for (int k = anXYPoints.Lower(); k <= anXYPoints.Upper(); k++) + aTextStream << " " << QString::number(anXYPoints(k).X(), 'f', 3) + << " " << QString::number(anXYPoints(k).Y(), 'f', 3) + << " 0.000\n"; + } + } + else if (anEnt->IsKind( STANDARD_TYPE(HYDROData_Profile) )) + { + //Collect data + Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( anEnt ); + HYDROData_ProfileUZ::PointsList aPointList = aProfile->GetParametricPoints(); + bool IsClosed = aProfile->GetProfileUZ(false)->IsClosedSection(0);; + bool IsSpline = false; + if (aProfile->GetProfileUZ(false)->GetSectionType(0) == HYDROData_PolylineXY::SECTION_SPLINE) + IsSpline = true; + //Write to stream + aTextStream << "B P\n"; + aTextStream << "CN " << aProfile->GetName() << "\n"; + aTextStream << "CP " << IsClosed << " " << IsSpline << "\n"; + gp_XY aLeftPoint(0.0, 0.0); + gp_XY aRightPoint(0.0, 0.0); + if (aProfile->GetLeftPoint(aLeftPoint, true) && aProfile->GetRightPoint(aRightPoint, true)) + aTextStream << "CP " << QString::number(aLeftPoint.X(), 'f', 3) << " " << + QString::number(aLeftPoint.Y(), 'f', 3) << " " << + QString::number(aRightPoint.X(), 'f', 3) << " " << + QString::number(aRightPoint.Y(), 'f', 3) << "\n"; + else + aTextStream << "CP 0.0 0.0 0.0 0.0\n"; + aTextStream << "CP 2\n"; + for (int k = aPointList.Lower(); k <= aPointList.Upper(); k++) + aTextStream << " " << QString::number(aPointList(k).X(), 'f', 3) + << " 0.000 " + << QString::number(aPointList(k).Y(), 'f', 3) << "\n"; + } + } +} \ No newline at end of file