91 Commits

Author SHA1 Message Date
addi
67b79f5851 Fix --prescan-world=disabled-force does not work 2016-06-14 04:32:36 +02:00
Rogier
dbec678f6b Close database when done
This prevents messages 'Connection reset by peer' in the postgresql log file.

It might have benefits for other databases as well ?
2016-05-23 12:46:25 +02:00
Rogier
570ed84fd2 Convert text drawn on the map to ISO8859-2 (which is what libgd uses)
Using non-ISO8859-2 encoded text (e.g. utf-8), or anything else,
may result in garbage characters.
2016-01-17 10:37:52 +01:00
Rogier
1ad247ddc4 Add an option to draw 'ignore' nodes.
This does require a color definition to be added to the colors file.

Implemented as a generic option to draw or ignore types of nodes
(i.e. 'air', 'ignore'). Ignoring specific named nodes from the
command-line is not (yet??) supported.
2016-01-17 10:37:51 +01:00
Rogier
03926420d0 Implement bounded block-list query for postgresql
i.e. allow minetestmapper to query the database for a list of
blocks in a specific range (corresponding to the requested geometry),
instead of always obtaining a full list off all blocks.

As postgresql is the only database which supports this efficiently,
this option is only effective for postgresql.
2016-01-17 10:37:51 +01:00
Rogier
4041993672 Fix incorrect handling of some options when backend==auto 2016-01-17 10:37:50 +01:00
Rogier
1fbf6d3962 Use cstdint instead of stdint.h to (hopefully) fix any problems caused by C/C++ mismatches
INT64_MIN was causing problems ('not declared'), because C99 requires some
C++-specific behavior, which C++11 prohibits...

Comments from clang's stdint implementation (http://clang.llvm.org/doxygen/stdint_8h_source.html):

	// C99 7.18.3 Limits of other integer types
	//
	//  Footnote 219, 220: C++ implementations should define these macros only when
	//  __STDC_LIMIT_MACROS is defined before <stdint.h> is included.
	//
	//  Footnote 222: C++ implementations should define these macros only when
	//  __STDC_CONSTANT_MACROS is defined before <stdint.h> is included.
	//
	// C++11 [cstdint.syn]p2:
	//
	//  The macros defined by <cstdint> are provided unconditionally. In particular,
	//  the symbols __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS (mentioned in
	//  footnotes 219, 220, and 222 in the C standard) play no role in C++.
	//
	// C11 removed the problematic footnotes.
2015-05-31 07:08:25 +02:00
Rogier
2ca8ce4c53 Print suggestion messages related to the use of --disable-blocklist-prefetch 2015-03-10 18:12:53 +01:00
Rogier
0a5e24b7d7 Add option --silence-suggestions, to disable certain messages
Specific message types will be in a later commit
2015-03-10 18:12:53 +01:00
Rogier
b3ce6116a5 Add an option to specify database format (for use with --disable-blocklist-prefetch)
When using --disable-blocklist-prefetch, the database key format for every leveldb
block, which is normally determined when prefetching the block list, is not known.

In order to avoid duplicate queries using both key formats, the key format can now
be specified using --database-format
2015-03-10 18:12:53 +01:00
Rogier
38f4272dd3 Add an option to disable prefetching the block list from the database
This introduces a speed tradeoff.

When mapping a small part of a large world, the prefetch time dominates
the mapping time, and it is more advantageous to skip the prefetch and
query all possible blocks in the mapped space.

When mapping a large fraction of a world, in particular when a lot of
the mapped space is empty, the time spent querying non-existing blocks can
dominate mapping time, and it is more advantageous to prefetch the list
of existing blocks, so that querying huge numbers of non-existing blocks
can be avoided.
2015-03-10 18:12:53 +01:00
Rogier
d6e08adefe Fixes to statistical variables & other minor changes 2015-03-10 17:47:30 +01:00
Rogier
0462481e1f Report key formats found in leveldb (currently applicable to freeminer worlds) 2015-03-10 17:47:30 +01:00
Rogier
f7e822adf0 Change verboseStatistics to int (from bool) 2015-03-10 17:47:29 +01:00
Rogier
a3f01d5a1e Report minimum and maximum Y coordinate mapped (hint for --min-y and --max-y) 2015-03-10 17:47:29 +01:00
Rogier
7c2cf3efa9 Cleanup sqlite3 database code a bit
As tests using --sqlite-cacheworldrow showed a consistently
lower performance than without, this option was effectively
disabled. It is still recognised for compatibility, but
it may be removed some time in the future.
2015-03-10 12:01:55 +01:00
Rogier
a6eed3a1ed Add options to specify a custom major and minor interval in the scale(s). 2015-02-20 13:10:09 +01:00
Rogier
5ce7ff4bce Allow scaling a map to a smaller size while generating. (1/2, 1/4 .. 1/16)
Scaling will not average nodes across block boundaries, This implies
that the only scale factors supported are 1:2, 1:4, 1:8 and 1:16.
2015-02-20 13:10:09 +01:00
Rogier
994e9d7171 Add the option to draw a height scale for the height map 2015-02-20 13:10:09 +01:00
Rogier
4476de429d Allow reading heightmap colors from file, and use separate option for nodes file 2015-02-20 13:10:09 +01:00
Rogier
3812e31fc9 Add options to generate a height map of the world.
--heightmap: generate the height map, in colors
--heightmap-grey: use shades of grey instead of colors
--sealevel <n>: define the sea level (below sea level is drawn in blue)
--heightmap-scale <f>: scale the heights by f (for the purpose of
  color selection)

When generating a heightmap, a special colors file is needed,
that defines just the blocks that should be considered part
of the ground. That means that normally, any plants, special
nodes and water should not be included.
2015-02-20 13:10:09 +01:00
Rogier
2d3eaff736 Enlarge left scale (was too small for 5-digit numbers) 2015-02-20 13:10:09 +01:00
Rogier
d538398c31 Allow selecting which sides to draw the scale on (top and/or left) 2015-02-20 13:10:09 +01:00
Rogier
784cf9604f Replace m_nextStoredYCoord by a PixelAttributes member. 2015-02-20 13:10:09 +01:00
Rogier
22041a8603 Add shorthand options to draw tiles matching map-blocks and map-chunks
The option --tiles has two new possible values: 'block' and 'chunk'
'block' creates tiles corresponding to map blocks
'chunk' creates tiles corresponding to map chunks
(chunks are the unit of map generation).

An option --chunksize was added to manually override the chunk size.
2015-02-20 13:10:08 +01:00
Rogier
5aa358aafe Rename some constants for clarity 2015-02-20 13:10:08 +01:00
Rogier
b99111e038 Add a --drawalpha mode that keeps water (etc.) transparent to great depths
This new mode averages the colors of all transparent blocks, instead of
making the colors progressively darker and more opaque.

This 'average' mode is now the default when using --drawalpha. It can be
explicitly selected using --drawalpha=average. The old modes can be selected
using --drawalpha=cumulative[-darken].

It is recommended to change the colors of water as well. These are in a
separate patch.
2014-06-19 13:30:00 +02:00
Rogier
a065e68eac Make darkening of thick transparent stacks (e.g. deep water) configurable.
In order to reduce rendering surprises, this darkening is off by default
(it was on previously).
2014-06-18 21:19:14 +02:00
Rogier
66122c1c2e Freeminer database coordinate format support ('a<x>,<y>,<z>') 2014-06-18 10:12:44 +02:00
Rogier
60b39e7d4b Generalize processing of air and ignore nodes 2014-06-18 10:11:11 +02:00
Rogier
f832530bf8 Allow air nodes to have a color.
As this comes with a significant performance penalty, this
feature must be enabled using the command-line option --drawair

For best results, the color of air should be fully transparent,
so that underlying nodes will override it.
2014-06-18 10:07:55 +02:00
Rogier
ced0390611 Add a default color for nodes
This is useful to show invisible ('air' or 'invalid') nodes in blocks
that are in the database using a different color than blocks that are
not in the database (which will have no color at all, causing the
background color to show).
2014-06-18 10:06:46 +02:00
Rogier
e6322f2911 Add an include directive for colors files
A colors file can now specify other colors files, from which
additional node color specifications will be read. This allows, for
instance, using system-installed colors file for most colors,
and only overriding some of its colors in a custom colors file.

As a purpose of using a custom colors file may be to leave the colors
for some nodes undefined, it is now also possible to undefine a
previously defined node color (i.e. after reading another colors file
which defines a color for the node).
2014-06-18 10:02:51 +02:00
Rogier
224c6b1df7 Add a command-line option to report which colors file is being used. 2014-06-18 09:50:41 +02:00
Rogier
f3c25ac729 Fix and improve configuration of tiles location 2014-05-23 13:47:41 +02:00
Rogier
736e2a8d27 Add command-line options to draw geometrical figures on the map
Supported figures are points, lines, ellipses, rectangles
and text.

The figures' locations can be specified using either world
coordinates, or map coordinates.
2014-05-23 13:47:41 +02:00
Rogier
c00cc13e6a Generalize the parsing of coordinates and geometry strings.
In preparation for future changes.

New geometry and new coordinate syntax has been added as well:

Additional node coordinate formats:
    <block>#[<node>]
    <block>.[<node>]

Additional geometry formats:
    <x1>,<y1>:<x2>,<y2>
    <x>,<y>:<w>x<h>

Also: the old geometry behavior (block granularity and map shrinking)
is now enabled only if the old geometry format is used (for compatibility)
2014-05-23 13:47:40 +02:00
Rogier
6544d4de37 Catch block data parsing errors (e.g. caused by a corrupt map block)
Corrupt blocks are reported, and map generation continues. Map
generation aborts only after 100 or more corrupt map blocks.
2014-05-23 13:47:40 +02:00
Rogier
721fbfac52 Obtain database backend type from the world's world.mt file by default 2014-05-23 13:47:40 +02:00
Rogier
49cb97598d Fix choice between c++11 unordered_map and c++0x regular (ordered) map 2014-05-22 10:41:47 +02:00
Rogier
d57ce63c46 Move min/max mapblock defines to config.h, and rename them 2014-05-22 10:41:11 +02:00
Rogier
c692d3d652 Improvements to database code & some small optimisations 2014-05-22 10:32:12 +02:00
Rogier
bbf92d2ffa Split struct BlockPos into own header 2014-05-22 10:12:10 +02:00
Rogier
902f3b45d7 Use a common ustring type definition instead of different custom versions 2014-05-22 10:12:03 +02:00
Rogier
5e4ee45575 Move color string parsing to constructor of class Color & add a constructor using an integer
Added formats for Color constructor:
- plain interger (2^24 * alpha + 2^16 * red + 2^8 * green + blue)
- Color string consisting of:
  - '#'
  - 3, 4, 6 or 8 hex digits
2014-05-12 09:26:17 +02:00
Rogier
751f3dc131 Abstraction of tile parameters computation to its own function. 2014-04-16 15:13:51 +02:00
Rogier
06237f5abc Improve layout of verbose geometry messages & tune their verbosity 2014-04-16 15:12:59 +02:00
Rogier
6a26a8ef4b 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-16 15:12:37 +02:00
Rogier
2119a6ae75 Make PixelAttributes more generic
In preparation for other changes
2014-04-16 10:55:58 +02:00
Rogier
ce94029c95 Merge PixelCacheEntry into PixelAttributes 2014-04-14 01:29:58 +02:00