#include <TDataStd_RealArray.hxx>
#include <TDataStd_AsciiString.hxx>
#include <TDataStd_Integer.hxx>
+#include <TDataStd_ExtStringArray.hxx>
#include <QColor>
#include <QFile>
#include <QPointF>
#include <QPolygonF>
#include <QStringList>
+#include <QString>
#ifndef LIGHT_MODE
#include <vtkPoints.h>
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;
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 )
{
return aRes;
}
-bool HYDROData_Bathymetry::ImportFromFile( const TCollection_AsciiString& theFileName )
+bool HYDROData_Bathymetry::ImportFromFile( const QString& theFileName )
{
- // Try to open the file
- QFile aFile( theFileName.ToCString() );
- if ( !aFile.exists() || !aFile.open( QIODevice::ReadOnly ) )
- return false;
+ return ImportFromFiles(QStringList(theFileName));
+}
- bool aRes = false;
+bool HYDROData_Bathymetry::ImportFromFiles( const QStringList& theFileNames )
+{
+ AltitudePoints AllPoints;
+ bool Stat = false;
- QString aFileSuf = QFileInfo( aFile ).suffix().toLower();
+ foreach (QString theFileName, theFileNames)
+ {
+ // Try to open the file
+ QFile aFile( theFileName );
+ if ( !aFile.exists() || !aFile.open( QIODevice::ReadOnly ) )
+ continue;
- HYDROData_Bathymetry::AltitudePoints aPoints;
+ QString aFileSuf = QFileInfo( aFile ).suffix().toLower();
- // Try to import the file
- if ( aFileSuf == "xyz" )
- aRes = importFromXYZFile( aFile, aPoints );
- else if ( aFileSuf == "asc" )
- aRes = importFromASCFile( aFile, aPoints );
+ HYDROData_Bathymetry::AltitudePoints aPoints;
- // Close the file
- aFile.close();
-
+ // Try to import the file
+ if ( aFileSuf == "xyz" )
+ Stat = importFromXYZFile( aFile, aPoints );
+ else if ( aFileSuf == "asc" )
+ Stat = importFromASCFile( aFile, aPoints );
+
+ 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,