]> git.mxchange.org Git - simgear.git/commitdiff
spt: Normalize the bucket box meta filename lengths.
authorMathias Froehlich <Mathias.Froehlich@web.de>
Sun, 24 Feb 2013 12:03:06 +0000 (13:03 +0100)
committerMathias Froehlich <Mathias.Froehlich@web.de>
Mon, 25 Feb 2013 05:42:55 +0000 (06:42 +0100)
simgear/scene/tgdb/BucketBox.hxx

index a61c23c6eec3efda744ad230029e8c01e5551b71..1d43c3df510df2eaa3668cb3091a09bdeab5707b 100644 (file)
@@ -22,7 +22,9 @@
 
 #include <cassert>
 #include <istream>
+#include <iomanip>
 #include <ostream>
+#include <sstream>
 
 #include <simgear/bucket/newbucket.hxx>
 #include <simgear/math/SGGeometry.hxx>
@@ -482,24 +484,48 @@ template<typename char_type, typename traits_type>
 std::basic_ostream<char_type, traits_type>&
 operator<<(std::basic_ostream<char_type, traits_type>& os, const BucketBox& bucketBox)
 {
+    std::basic_stringstream<char_type, traits_type> ss;
+
+    double minSize = std::min(bucketBox.getWidthDeg(), bucketBox.getHeightDeg());
+    
+    unsigned fieldPrecision = 0;
+    if (minSize <= 0.125) {
+        fieldPrecision = 3;
+    } else if (minSize <= 0.25) {
+        fieldPrecision = 2;
+    } else if (minSize <= 0.5) {
+        fieldPrecision = 1;
+    }
+
+    unsigned lonFieldWidth = 3;
+    if (fieldPrecision)
+        lonFieldWidth += 1 + fieldPrecision;
+
+    ss << std::fixed << std::setfill('0') << std::setprecision(fieldPrecision);
+
     double lon = bucketBox.getLongitudeDeg();
     if (lon < 0)
-        os << "w" << -lon;
+        ss << "w" << std::setw(lonFieldWidth) << -lon << std::setw(0);
     else
-        os << "e" << lon;
+        ss << "e" << std::setw(lonFieldWidth) << lon << std::setw(0);
     
+    unsigned latFieldWidth = 2;
+    if (fieldPrecision)
+        latFieldWidth += 1 + fieldPrecision;
+
     double lat = bucketBox.getLatitudeDeg();
     if (lat < -90)
         lat = -90;
     if (90 < lat)
         lat = 90;
     if (lat < 0)
-        os << "s" << -lat;
+        ss << "s" << std::setw(latFieldWidth) << -lat << std::setw(0);
     else
-        os << "n" << lat;
+        ss << "n" << std::setw(latFieldWidth) << lat << std::setw(0);
     
-    os << "-" << bucketBox.getWidthDeg() << "x" << bucketBox.getHeightDeg();
-    return os;
+    ss << "-" << bucketBox.getWidthDeg() << "x" << bucketBox.getHeightDeg();
+
+    return os << ss.str();
 }
 
 /// Stream inout operator.