]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
#refs 521
authorisn <isn@opencascade.com>
Mon, 18 May 2015 08:20:30 +0000 (11:20 +0300)
committerisn <isn@opencascade.com>
Tue, 19 May 2015 10:20:51 +0000 (13:20 +0300)
src/HYDROData/HYDROData_Bathymetry.cxx
src/HYDROData/HYDROData_Bathymetry.h
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index e3320ad2d4f308b5e68a32ac9f309494514cd6c9..adc140a1db93066822acd12b612faced8666e980 100644 (file)
@@ -409,6 +409,8 @@ bool HYDROData_Bathymetry::ImportFromFile( const TCollection_AsciiString& theFil
   // Try to import the file
   if ( aFileSuf == "xyz" )
     aRes = importFromXYZFile( aFile, aPoints );
+  else if ( aFileSuf == "asc" )
+    aRes = importFromASCFile( aFile, aPoints );
 
   // Close the file
   aFile.close();
@@ -496,6 +498,97 @@ bool HYDROData_Bathymetry::importFromXYZFile( QFile&          theFile,
   return true;
 }
 
+bool HYDROData_Bathymetry::importFromASCFile( QFile&          theFile,
+                                              AltitudePoints& thePoints ) const
+{
+  if ( !theFile.isOpen() )
+    return false;
+
+  QString aLine;
+  QStringList aStrList;
+
+  int aNCols;
+  int aNRows;
+  double anXllCorner; 
+  double anYllCorner; 
+  double aCellSize; 
+  double aNoDataValue;
+
+  aLine = theFile.readLine().simplified();
+  aStrList = aLine.split( ' ', QString::SkipEmptyParts );
+  if ( aStrList.length() != 2 && aStrList[0].toLower() != "ncols" )
+    return false;
+  aNCols = aStrList[1].toInt();
+
+  aLine = theFile.readLine().simplified();
+  aStrList = aLine.split( ' ', QString::SkipEmptyParts );
+  if ( aStrList.length() != 2 && aStrList[0].toLower() != "nrows" )
+    return false;
+  aNRows = aStrList[1].toInt();
+
+  aLine = theFile.readLine().simplified();
+  aStrList = aLine.split( ' ', QString::SkipEmptyParts );
+  if ( aStrList.length() != 2 && aStrList[0].toLower() != "xllcorner" )
+    return false;
+  anXllCorner = aStrList[1].toDouble();
+
+  aLine = theFile.readLine().simplified();
+  aStrList = aLine.split( ' ', QString::SkipEmptyParts );
+  if ( aStrList.length() != 2 && aStrList[0].toLower() != "yllcorner" )
+    return false;
+  anYllCorner = aStrList[1].toDouble();
+
+  aLine = theFile.readLine().simplified();
+  aStrList = aLine.split( ' ', QString::SkipEmptyParts );
+  if ( aStrList.length() != 2 && aStrList[0].toLower() != "cellsize" )
+    return false;
+  aCellSize = aStrList[1].toDouble();
+
+  aLine = theFile.readLine().simplified();
+  aStrList = aLine.split( ' ', QString::SkipEmptyParts );
+  if ( aStrList.length() != 2 && aStrList[0].toLower() != "nodata_value" )
+    return false;
+  aNoDataValue = aStrList[1].toDouble();
+
+  bool anIsAltitudesInverted = IsAltitudesInverted();
+
+  int i = 0;
+  int aStrLength = 0;
+  while ( !theFile.atEnd() )
+  {
+    aLine = theFile.readLine().simplified();
+    aStrList = aLine.split( ' ', QString::SkipEmptyParts );
+
+    aStrLength =  aStrList.length();
+    if ( aStrLength == 0 )
+      continue;
+
+    if ( aStrLength != aNRows )
+      return false;
+
+    for (int j = 0; j < aNCols; j++)
+    {
+      if (aStrList[j].toDouble() != aNoDataValue)
+      {
+        AltitudePoint aPoint;
+        aPoint.SetX(anXllCorner + aCellSize*(j + 0.5));
+        aPoint.SetY(anYllCorner + aCellSize*(aNRows - i + 0.5));
+        aPoint.SetZ(aStrList[j].toDouble());
+
+        if ( anIsAltitudesInverted )
+         aPoint.SetZ( -aPoint.Z() );
+
+        thePoints.Append(aPoint);
+      }
+    }
+    i++;
+
+  }
+
+  return true;
+
+}
+
 
 Handle_HYDROData_PolylineXY HYDROData_Bathymetry::CreateBoundaryPolyline() const
 {
index fcd4829f24188872fea68ab02b3d6bd695c8b88e..881af2c56d5f991c76992079b9e6e45e719f0956 100644 (file)
@@ -146,6 +146,9 @@ private:
   bool                                      importFromXYZFile( QFile&          theFile,
                                                                AltitudePoints& thePoints ) const;
 
+  bool                                      importFromASCFile( QFile&          theFile,
+                                                               AltitudePoints& thePoints ) const;
+
 protected:
 
   friend class HYDROData_Iterator;
index 862778450422773bd8e51b45537fdec8a21282cc..42a8aa1f2a40852949717f10eafa0a3dbb85ecb2 100644 (file)
@@ -85,7 +85,7 @@
     </message>
     <message>
       <source>BATHYMETRY_FILTER</source>
-      <translation>Bathymetry files (*.xyz);;All files (*.* *)</translation>
+      <translation>Bathymetry files (*.xyz);;ASC files (*.asc);;All files (*.* *)</translation>
     </message>
     <message>
       <source>CASE_BOUNDARY</source>