From 8e8cc3d1f2f551b0d1aee2081c9691aa68cd18d0 Mon Sep 17 00:00:00 2001 From: Martijn Versteegh Date: Sat, 20 Oct 2018 17:40:01 +0200 Subject: [PATCH] Add an option to get the extent of the map. --- README.rst | 3 +++ TileGenerator.cpp | 21 +++++++++++++++++++++ include/TileGenerator.h | 1 + mapper.cpp | 11 ++++++++++- minetestmapper.6 | 4 ++++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/README.rst b/README.rst index ab75e45..ccd18f1 100644 --- a/README.rst +++ b/README.rst @@ -77,6 +77,9 @@ draworigin: drawalpha: Allow nodes to be drawn with transparency (e.g. water), ``--drawalpha`` +extent: + Don't output any imagery, just print the extent of the full map, ``--extent`` + noshading: Don't draw shading on nodes, ``--noshading`` diff --git a/TileGenerator.cpp b/TileGenerator.cpp index 3f72b7e..b247588 100644 --- a/TileGenerator.cpp +++ b/TileGenerator.cpp @@ -208,6 +208,27 @@ void TileGenerator::parseColorsFile(const std::string &fileName) parseColorsStream(in); } +void TileGenerator::printGeometry(const std::string &input) +{ + string input_path = input; + if (input_path[input.length() - 1] != PATH_SEPARATOR) { + input_path += PATH_SEPARATOR; + } + + openDb(input_path); + loadBlocks(); + + std::cout << "Map extent: " + << m_xMin*16 << ":" << m_zMin*16 + << "+" << (m_xMax - m_xMin+1)*16 + << "+" << (m_zMax - m_zMin+1)*16 + << std::endl; + + closeDatabase(); + +} + + void TileGenerator::generate(const std::string &input, const std::string &output) { string input_path = input; diff --git a/include/TileGenerator.h b/include/TileGenerator.h index 51efc75..1ef23cd 100644 --- a/include/TileGenerator.h +++ b/include/TileGenerator.h @@ -86,6 +86,7 @@ public: void parseColorsFile(const std::string &fileName); void setBackend(std::string backend); void generate(const std::string &input, const std::string &output); + void printGeometry(const std::string &input); void setZoom(int zoom); void setScales(uint flags); diff --git a/mapper.cpp b/mapper.cpp index d847e8f..c57ec51 100644 --- a/mapper.cpp +++ b/mapper.cpp @@ -28,6 +28,7 @@ void usage() " --max-y \n" " --backend \n" " --geometry x:y+w+h\n" + " --extent\n" " --zoom \n" " --colors \n" " --scales [t][b][l][r]\n" @@ -80,6 +81,7 @@ int main(int argc, char *argv[]) {"noshading", no_argument, 0, 'H'}, {"backend", required_argument, 0, 'd'}, {"geometry", required_argument, 0, 'g'}, + {"extent", no_argument, 0, 'E'}, {"min-y", required_argument, 0, 'a'}, {"max-y", required_argument, 0, 'c'}, {"zoom", required_argument, 0, 'z'}, @@ -95,6 +97,7 @@ int main(int argc, char *argv[]) TileGenerator generator; int option_index = 0; int c = 0; + bool onlyPrintExtent = false; while (1) { c = getopt_long(argc, argv, "hi:o:", long_options, &option_index); if (c == -1) { @@ -139,6 +142,9 @@ int main(int argc, char *argv[]) case 'e': generator.setDrawAlpha(true); break; + case 'E': + onlyPrintExtent = true; + break; case 'H': generator.setShading(false); break; @@ -206,7 +212,10 @@ int main(int argc, char *argv[]) colors = search_colors(input); try { generator.parseColorsFile(colors); - generator.generate(input, output); + if (onlyPrintExtent) + generator.printGeometry(input); + else + generator.generate(input, output); } catch(std::runtime_error e) { std::cerr << "Exception: " << e.what() << std::endl; return 1; diff --git a/minetestmapper.6 b/minetestmapper.6 index 5cdd6d9..72b1ced 100644 --- a/minetestmapper.6 +++ b/minetestmapper.6 @@ -72,6 +72,10 @@ Use specific map backend; supported: *sqlite3*, *leveldb*, *redis*, *postgresql* .BR \-\-geometry " " \fIgeometry\fR Limit area to specific geometry (*x:y+w+h* where x and y specify the lower left corner), e.g. "--geometry -800:-800+1600+1600" +.TP +.BR \-\-extent " " \fIextent\fR +Dont render the image, just print the extent of the map that would be generated, in the same format as the geometry above. + .TP .BR \-\-zoom " " \fIfactor\fR Zoom the image by using more than one pixel per node, e.g. "--zoom 4"