From 99b31348109ef8d27a5cfee971eff82100dbf14b Mon Sep 17 00:00:00 2001 From: Rogier Date: Fri, 25 Dec 2015 11:15:36 +0100 Subject: [PATCH] Add option to draw arrows on the map --- doc/images/drawarrow.png | Bin 0 -> 11133 bytes doc/manual.rst | 13 ++++++++++++ mapper.cpp | 43 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 doc/images/drawarrow.png diff --git a/doc/images/drawarrow.png b/doc/images/drawarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..4f60478edaf57fd05fc243f34abfdf9d9a9c3a16 GIT binary patch literal 11133 zcmZu%RX`j~6ATdCIa~ru;A|heeeIn?%d1G z_RMrwRo8B)l7b{U3Ngxu4+K41*|cflmm zV~~9KK=DBuETZ-^be*; zt1m>8gNzLQtwoTdHY|^lGe;200EQ9_A|Z0cmLW~m{zonxEqm*G-K?#8v{+z9V!J-0 zi;7$nl7H9;!60{2@>F7da?I;4`}O*HS1K8k*_+mvXMYMbi_H%A_H*{l&2#zi^XG=A znT?IEvTmvT$Zpp{#A)#7Jn3+1gpp8-xsg2>rqC{kIqtl=g+k? zR+mHFmJJjlki#5Jti=k+BOQzJL%7hyn)&8NnQ&_RThfnMjH^&tDN8xYsMWOYf@RVk<=$%*i<;L|}sk!|3HdcWLX}t$xTF)7wYqvQMp`mEMc1q3l1n4 zQSr(|VYJ6k7|EtqHBb6YhJ+?@w>;Mb8%(l%RjhUt>9b7ta%I!R~U+?5`=Z zIx@G51)M}i?;%$8*4hR}*D@wOCCPIL!fJC!PX~ej--7TMO~tzt*>&0~Fzu(h?4IQ&r?vciSd z`3x=VezV+HX4hwkap|xsySjPeD?`Z~wFZBh6EsPt3&a7e4`B9}X)rGL=#e&Zhbx1}HKkw;1cKEj&n!u>whfSNh_=war8%G9ZEI_J=%fv78qw=z=+Ur< zy8mmJXNWKaWeHh)y0$&zbj zYb-4;3OL9L0WJqNMea~WrC^fv;=`W0bYq6=+3_au?A|xRI z*_bUfq=Ba$=mv-Y9rsDHI|g0XhrR;L2Xbt@2z!j8qe&7DB$MOvo@^7!8^ z9TNfVli1vGZ|`-y`1tfI(&4OuN7H6V8g40^vXNnCXd++@Cp$p;Vbduif2Xem!6-gY z!;w*F4HLGg8vP{vTmXEZtN{AJ+2?4%uBXH z@iw~CI}gjy%SNS$9o9%_aY&F97GcWIm_Yt*lfrobKyzXM56G5pVdGw=LG}Asmu>;g zr}_g6c_WXA(-Xw#TlfS5$53x=rzfrHr>I8>2F$I0Db_iNPhWLwH;@b!YUG6*N3l^K zu{~>AE}-dm_``7(AINtzOV7am@Fl}&m%}5!s6k6m*LGE(7Pn#X$b}e_UMN#p!Lo95 zA~RfY&Kc$LXt+1M^*iaP;95O4YgGyT_^ZRQtM#A+$>3f?#s&h>0{Z90J+PrL9VZ7z zLBdWBWFG#iXO`2C6Jkk0WD?DNVeV@7%lzrw;G{YGU8g|E>EOrcskl> zR)`CtwG|e%WaTI0)Luj?j=|XJJ5$WTYk?m|EdUm{xC-fTP;W;=3^J0el#=m)=nr73 z$bu2FVA5=W6=k*YASGjTkzFlpj1w#!)$(9UG5~kX_fAraEQj25StJUY4N>IFzP9I| z7UgRZ5YNH`i)iX#V}9hhN_bQzA%r4Onj(dhj0jNFUKs76NNk3E*mojBqQ7qoS>JzBDvRg)5%V?X^+ zyCXiCHS#YFPbJ=)%c{0wOIkefQ|MEgM+9;h%jZQ4Bk}=4_7*!-;{FTpG{CL-i?@^( zjl81iV-F@hRg(%zBQBKyb||f~UkQE)my(fa(6dM_ez9x|Q8^3FXd3i{sRzvY7!(IY z17dr-Ec?iM1AFas5>#lXSce2OJZ;%178CHtKZc_tV^8pTmLFX8e-Sj1<<&eAB$?qh?G(#+uZkR#UX~RPJ&0 zr1|s^%!+{98?az%(IOpg7LXWRq>sEDl^5P;c40i%jzK+Obh9) z|LQsfyU|J6TubmcAjH}2N4pxzFy=pU9(R;)x8$AY!7zVV zj0`XS%(G7}WKnzu9*@fALxsuYg~ziDWjfAM`QY#c5eAwbWc$#Z7PKH897q~(EGR&2 z8zS0E`29t=n<1&d5k&;)?{I4InQ9&v&9_ReI?B5ahB>~q`WdH;ez0N?-u45M@$TUy zS;t7HvfN}kVTRcG$%(4WSB;JlkQNr

L+GkjK%!RX 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 bJ0b$ArFqT4c0BZZ+7Hs=3g9YH!+`$*ktuiw literal 0 HcmV?d00001 diff --git a/doc/manual.rst b/doc/manual.rst index 4474ed2..a0c0896 100644 --- a/doc/manual.rst +++ b/doc/manual.rst @@ -286,6 +286,7 @@ Drawing figures on the map * ``--drawpoint ", "`` : Draw a point (single pixel) on the map * ``--drawline " "`` : Draw a line on the map + * ``--drawarrow " "`` : Draw an arrow on the map * ``--drawcircle " "`` : Draw a circle on the map * ``--drawellipse " "`` : Draw an ellipse on the map * ``--drawrectangle " "`` : Draw a rectangle on the map @@ -295,6 +296,7 @@ Drawing figures on the map * ``--drawmappoint ", "`` : Draw a point (single pixel) on the map * ``--drawmapline " "`` : Draw a line on the map + * ``--drawmaparrow " "`` : Draw an arrow on the map * ``--drawmapcircle " "`` : Draw a circle on the map * ``--drawmapellipse " "`` : Draw an ellipse on the map * ``--drawmaprectangle " "`` : Draw a rectangle on the map @@ -522,6 +524,7 @@ Detailed Description of Options * circle * ellipse (which is a synonym for circle) * line + * arrow * point (which uses simple coordinates (x,y) instead of a geometry) * rectangle * text (which uses simple coordinates (x,y) instead of a geometry) @@ -609,6 +612,16 @@ Detailed Description of Options .. image:: images/drawline.png +``--draw[map]arrow " "`` +......................................... + Draw an arrow on the map, with the given geometry and color. + + See `--draw[map]

`_ for details. + + An example arrow: + + .. image:: images/drawarrow.png + ``--draw[map]point ", "`` ...................................... Draw a point on the map, at the given location, using the given color. diff --git a/mapper.cpp b/mapper.cpp index 0386aa5..d643b0b 100644 --- a/mapper.cpp +++ b/mapper.cpp @@ -48,6 +48,7 @@ using namespace std; #define DRAW_ARROW_LENGTH 10 #define DRAW_ARROW_ANGLE 30 + // Will be replaced with the actual name and location of the executable (if found) string executableName = "minetestmapper"; string executablePath; // ONLY for use on windows @@ -130,6 +131,8 @@ void usage() " --draw[map]circle \" color\"\n" " --draw[map]ellipse \" color\"\n" " --draw[map]rectangle \" color\"\n" + " --draw[map]arrow \", , color\"\n" + " --draw[map]arrow \", [np] color\"\n" " --draw[map]text \", color text\"\n" " --noshading\n" " --min-y \n" @@ -436,6 +439,16 @@ static void convertDimensionToCornerCoordinates(NodeCoord &coord1, NodeCoord &co } } +static void convertCornerToDimensionCoordinates(NodeCoord &coord1, NodeCoord &coord2, NodeCoord &dimensions, int n) +{ + for (int i = 0; i < n; i++) { + if (coord2.dimension[i] < coord1.dimension[i]) + dimensions.dimension[i] = coord2.dimension[i] - coord1.dimension[i] - 1; + else + dimensions.dimension[i] = coord2.dimension[i] - coord1.dimension[i] + 1; + } +} + static void convertPolarToCartesianCoordinates(NodeCoord &coord1, NodeCoord &coord2, double angle, double length) { angle *= M_PI / 180; @@ -696,12 +709,14 @@ int main(int argc, char *argv[]) {"drawcircle", required_argument, 0, OPT_DRAW_OBJECT}, {"drawellipse", required_argument, 0, OPT_DRAW_OBJECT}, {"drawrectangle", required_argument, 0, OPT_DRAW_OBJECT}, + {"drawarrow", required_argument, 0, OPT_DRAW_OBJECT}, {"drawtext", required_argument, 0, OPT_DRAW_OBJECT}, {"drawmappoint", required_argument, 0, OPT_DRAW_OBJECT}, {"drawmapline", required_argument, 0, OPT_DRAW_OBJECT}, {"drawmapcircle", required_argument, 0, OPT_DRAW_OBJECT}, {"drawmapellipse", required_argument, 0, OPT_DRAW_OBJECT}, {"drawmaprectangle", required_argument, 0, OPT_DRAW_OBJECT}, + {"drawmaparrow", required_argument, 0, OPT_DRAW_OBJECT}, {"drawmaptext", required_argument, 0, OPT_DRAW_OBJECT}, {"noshading", no_argument, 0, 'H'}, {"geometry", required_argument, 0, 'g'}, @@ -1282,6 +1297,9 @@ int main(int argc, char *argv[]) case 'c' : drawObject.type = TileGenerator::DrawObject::Ellipse; break; + case 'a' : + drawObject.type = TileGenerator::DrawObject::Line; + break; case 't' : drawObject.type = TileGenerator::DrawObject::Text; break; @@ -1372,6 +1390,31 @@ int main(int argc, char *argv[]) } generator.drawObject(drawObject); + if (object == 'a') { + if (drawObject.haveCenter) { + std::cerr << "Arrow cannot use a centered dimension." + << " Specify at least one corner." << std::endl; + exit(1); + } + bool useDimensions = drawObject.haveDimensions; + + if (drawObject.haveDimensions) + convertDimensionToCornerCoordinates(drawObject.corner1, drawObject.corner2, drawObject.dimensions, 2); + double angle, length; + convertCartesianToPolarCoordinates(drawObject.corner1, drawObject.corner2, angle, length); + convertPolarToCartesianCoordinates(drawObject.corner1, drawObject.corner2, angle + DRAW_ARROW_ANGLE, DRAW_ARROW_LENGTH); + if (useDimensions) { + convertCornerToDimensionCoordinates(drawObject.corner1, drawObject.corner2, drawObject.dimensions, 2); + drawObject.haveDimensions = useDimensions; + } + generator.drawObject(drawObject); + convertPolarToCartesianCoordinates(drawObject.corner1, drawObject.corner2, angle - DRAW_ARROW_ANGLE, DRAW_ARROW_LENGTH); + if (useDimensions) { + convertCornerToDimensionCoordinates(drawObject.corner1, drawObject.corner2, drawObject.dimensions, 2); + drawObject.haveDimensions = useDimensions; + } + generator.drawObject(drawObject); + } } break; case 'd':