minetest-mapper-cpp/README.rst

232 lines
5.6 KiB
ReStructuredText
Raw Normal View History

2012-09-02 10:46:12 -07:00
Minetest Mapper C++
===================
2013-08-14 12:44:03 -07:00
A port of minetestmapper.py to C++ from https://github.com/minetest/minetest/tree/master/util
2012-09-02 10:46:12 -07:00
Requirements
------------
* libgd
* sqlite3
Compilation
-----------
Plain:
2012-09-02 10:50:28 -07:00
::
2012-09-02 10:52:12 -07:00
2012-09-02 10:46:12 -07:00
cmake .
make
With levelDB support:
::
cmake -DENABLE_LEVELDB=true .
make
Debug version:
::
cmake -DCMAKE_BUILD_TYPE:STRING=Debug .
make
Release version:
::
cmake -DCMAKE_BUILD_TYPE:STRING=Release .
make
2012-09-02 10:46:12 -07:00
Usage
-----
2013-08-14 12:44:03 -07:00
Binary `minetestmapper` has two mandatory paremeters, `-i` (input world path)
2012-09-02 10:46:12 -07:00
and `-o` (output image path).
2012-09-02 10:50:28 -07:00
::
2012-09-02 10:52:12 -07:00
2013-08-14 12:44:03 -07:00
./minetestmapper -i ~/.minetest/worlds/my_world/ -o ~/map.png
2012-09-02 10:46:12 -07:00
Parameters
^^^^^^^^^^
bgcolor:
Background color of image, `--bgcolor #ffffff`
scalecolor:
Color of scale, `--scalecolor #000000`
playercolor:
Color of player indicators, `--playercolor #ff0000`
origincolor:
Color of origin indicator, `--origincolor #ff0000`
drawscale:
Draw tick marks, `--drawscale`
drawplayers:
Draw player indicators, `--drawplayers`
draworigin:
Draw origin indicator, `--draworigin`
drawalpha:
Allow blocks to be drawn with transparency, `--drawalpha`
2014-03-05 09:06:05 -08:00
noshading:
Don't draw shading on nodes, `--noshading`
min-y:
Don't draw nodes below this y value, `--min-y -25`
max-y:
Don't draw nodes above this y value, `--max-y 75`
2014-03-05 12:41:27 -08:00
backend:
Use specific map backend, supported: sqlite3, leveldb, `--backend leveldb`
Make the geometry pixel-accurate instead of map-block accurate When requesting, for instance, a 75x85 map, the mapper will now create a 75x85 map, instead of an 80x96 (or even 96x108) map as it did before. This new behavior is the default when using one of the options --centergeometry or --cornergeometry. In addition, both of these options will no longer shrink the map, to remove rows or columns of empty blocks at the edges. Previously, this behavior was enabled with --forcegeometry. An option --geometrymode has been added as well, to tune the interpretation of the geometry. It supports 4 flags: - pixel: the requested geometry is interpreted with pixel granularity. The map is not enlarged to include entire map blocks. - block: the requested geometry is interpreted with block granularity. The map is enlarged with at most 15 nodes at each of the four edges, so that it includes entire map blocks only. - fixed: a map of the requested geometry is created (after adjustmens for 'block' mode). Empty rows or columns at the edges are not removed. - shrink: Empty rows and columns at the map edges are removed to generate the smallest picture possible. Lastly, a new geometry syntax has been added, which is more compatible with known syntax (i.e. X-Windows), and which allows the offset to be optional. If the offset is omitted, the picture defaults to be centered around 0,0. `<width>x<height>[+|-<xoffset>+|-<yoffset>]` For compatibility, the behavior of the option --geometry was not changed. If (and only if) used before --geometrymode, it enables block granularity and shrink. The old option --forcegeometry is no longer documented, but still recognised for compatibility.
2014-04-15 01:46:21 -07:00
geometry <geometry>:
cornergeometry <geometry>:
centergeometry <geometry>:
Limit the part of the world that is included in the map.
2012-11-24 10:25:13 -08:00
Make the geometry pixel-accurate instead of map-block accurate When requesting, for instance, a 75x85 map, the mapper will now create a 75x85 map, instead of an 80x96 (or even 96x108) map as it did before. This new behavior is the default when using one of the options --centergeometry or --cornergeometry. In addition, both of these options will no longer shrink the map, to remove rows or columns of empty blocks at the edges. Previously, this behavior was enabled with --forcegeometry. An option --geometrymode has been added as well, to tune the interpretation of the geometry. It supports 4 flags: - pixel: the requested geometry is interpreted with pixel granularity. The map is not enlarged to include entire map blocks. - block: the requested geometry is interpreted with block granularity. The map is enlarged with at most 15 nodes at each of the four edges, so that it includes entire map blocks only. - fixed: a map of the requested geometry is created (after adjustmens for 'block' mode). Empty rows or columns at the edges are not removed. - shrink: Empty rows and columns at the map edges are removed to generate the smallest picture possible. Lastly, a new geometry syntax has been added, which is more compatible with known syntax (i.e. X-Windows), and which allows the offset to be optional. If the offset is omitted, the picture defaults to be centered around 0,0. `<width>x<height>[+|-<xoffset>+|-<yoffset>]` For compatibility, the behavior of the option --geometry was not changed. If (and only if) used before --geometrymode, it enables block granularity and shrink. The old option --forcegeometry is no longer documented, but still recognised for compatibility.
2014-04-15 01:46:21 -07:00
<geometry> has one of the formats:
<width>x<height>[<+|-xoffset><+|-yoffset>]
<xoffset>:<yoffset>+width+height
For cornergeometry, the offsets will be at the lower-left
corner of the image (offsets increase from left to right,
and from bottom to top).
For centergeometry, the offsets will be in the center of
the image.
If the offsets are not specified (with the first format),
the map is centered on the center of the world.
By default, the geometry has pixel granularity, and a map of
exactly the requested size is generated.
Only if the *first* geometry option on the command-line is
`--geometry`, then for compatibility, the old behavior
is default instead (i.e. block granularity, and a smaller
map if possible). Block granularity is also enabled when
the obsolete option '--forcegeometry' is found first.
Examples:
`--geometry 10x10-5-5`
`--cornergeometry 50x50+100+100`
`--centergeometry 1100x1300+1000-500`
`--centergeometry 1100x1300`
geometrymode pixel,block,fixed,shrink:
Specify how the geometry should be interpreted. One or
more of the flags may be used, separated by commas or
spaces. In case of conflicts, the last flag takes
precedence.
When using space as a separator, make sure to enclose
the list of flags in quotes!
geometrymode pixel:
Interpret the geometry specification with pixel granularity,
as opposed to block granularity (see below).
A map of exactly the requested size is generated (after
adjustments due to the 'shrink' flag).
geometrymode block:
Interpret the geometry specification with block granularity.
The requested geometry will be extended so that the map does
not contain partial map blocks (of 16x16 nodes each).
At *least* all pixels covered by the geometry will be in the
map, but there may be up to 15 more in every direction.
geometrymode fixed:
Generate a map of the requested geometry, even if part
or all of it would be empty.
geometrymode shrink:
Generate a map of at most the requested geometry. Shrink
it to the smallest possible size that still includes the
same information.
Currently, shrinking is done with block granularity, and
based on which blocks are in the database. If the database
contains empty, or partially empty blocks, there may still
be empty pixels at the edges of the map.
sqlite-cacheworldrow:
When using sqlite, read an entire world row at one, instead of reading
one block at a time.
2014-04-14 07:39:13 -07:00
This may improve performance when a large percentage of the world is mapped.
2014-04-10 03:30:03 -07:00
tiles <tilesize>[+<border>]
Divide the map in square tiles of the requested size. A border of the
requested width (or width 1, of not specfied) is drawn between the tiles.
In order to preserve all map pixels (and to prevent overwriting them with
borders), extra pixel rows and columns for the borders are inserted into
the map.
2014-04-14 07:39:13 -07:00
In order to allow partial world maps to be combined into larger maps, edge
borders of the map are always drawn on the same side (left or top). Other
edges are always border-less.
2014-04-14 07:39:13 -07:00
Examples:
`--tiles 1000`
2014-04-14 07:39:13 -07:00
`--tiles 1000+2`
2014-04-14 07:39:13 -07:00
NOTE: As a consequence of preserving all map pixels:
2014-04-14 07:39:13 -07:00
* tiled maps may look slightly distorted, due to the inserted borders.
2014-04-14 07:39:13 -07:00
* scale markers never align with tile borders, as the borders are
logically *between* pixels, so they have no actual coordinates.
tileorigin x,y
Arrange the tiles so that one tile has its bottom-left (i.e. south-west)
corner at map coordinates x,y.
2014-04-14 07:39:13 -07:00
By default, tiles are arranged so that one tile has map coordinate 0,0 at
its center.
2014-04-14 07:39:13 -07:00
Examples:
`--tileorigin -500,-500`
2014-04-14 07:39:13 -07:00
`--tileorigin center-map`
2014-04-14 07:39:13 -07:00
`--tileorigin center-world`
2014-04-10 03:30:03 -07:00
tilebordercolor
Color of border between tiles, `--tilebordercolor #000000`
verbose:
2014-04-14 07:39:13 -07:00
report some useful / interesting information:
* maximum coordinates of the world
2014-04-14 07:39:13 -07:00
* world coordinates included the map being generated
2014-04-14 07:39:13 -07:00
* number of blocks: in the world, and in the map area.
2014-04-14 07:39:13 -07:00
* database access statistics.