0

Merge branch 'master' into 19prep

This commit is contained in:
Aaron Griffith
2011-10-24 21:03:14 -04:00
59 changed files with 16275 additions and 353 deletions

View File

@@ -3,63 +3,41 @@ Minecraft Overviewer
====================
By Andrew Brown and contributors (see CONTRIBUTORS.rst).
http://github.com/overviewer/Minecraft-Overviewer
Documentation:
http://docs.overviewer.org
Generates large resolution images of a Minecraft map.
Github code repository:
http://github.com/overviewer/Minecraft-Overviewer
In short, this program reads in Minecraft world files and renders very large
resolution images that can be viewed through a Google Maps interface. It
performs a similar function to the existing Minecraft Cartographer program but
with a slightly different goal in mind: to generate large resolution images
such that one can zoom in and see details.
See some examples here!
http://github.com/overviewer/Minecraft-Overviewer/wiki/Map-examples
The Minecraft Overviewer is a command-line tool for rendering high-resolution
maps of Minecraft worlds. It generates a set of static html and image files and
uses the Google Maps API to display a nice interactive map.
Further documentation may be found at
https://github.com/overviewer/Minecraft-Overviewer/wiki/Documentation
The Overviewer has been in active development for over a year and has many
features, including day and night lighting, cave rendering, mineral overlays,
and many plugins for even more features! It is written mostly in Python with
critical sections in C as an extension module.
To contact the developers and other users, go to the site at the top of this
README, or go to #overviewer on irc.freenode.net.
Getting Started
---------------
All documentation has been consolidated at our documentation site. For
information on downloading, compiling, installing, and running The Overviewer,
visit the docs site.
Features
========
http://docs.overviewer.org
* Renders large resolution images of your world, such that you can zoom in and
see details
A few helpful tips are below, but everyone is going to want to visit the
documentation site for the most up-to-date and complete set of instructions!
* Customizable textures! Pulls textures straight from your installed texture
pack!
Alternatively, the docs are also in the docs/ directory of the source download.
Look in there if you can't access the docs site.
* Outputs a Google Map powered interface that is memory efficient, both in
generating and viewing.
Examples
--------
See examples of The Overviewer in action!
* Renders efficiently in parallel, using as many simultaneous processes as you
want!
* Utilizes caching to speed up subsequent renderings of your world.
* Throw the output directory up on a web server to share your Minecraft world
with everyone!
Requirements
============
This program requires:
* Python 2.6 or 2.7 <http://python.org/download/>
* PIL (Python Imaging Library) <http://www.pythonware.com/products/pil/>
* Numpy <http://scipy.org/Download>
* Either the Minecraft client installed, or a terrain.png file. See the
`Textures`_ section below.
* A C compiler.
If you download a binary package, then some or all of these may not be required.
Using the Overviewer
====================
For a quick-start guide, see
https://github.com/overviewer/Minecraft-Overviewer/wiki/Quick-Start-Guide
https://github.com/overviewer/Minecraft-Overviewer/wiki/Map-examples
Disclaimers
-----------
@@ -78,204 +56,6 @@ directory and it will only update the tiles it needs to.
There are probably some other minor glitches along the way, hopefully they will
be fixed soon. See the `Bugs`_ section below.
Textures
--------
The Overviewer uses actual textures to render your world. However, I don't
include textures in the package. You will need to do one of two things before
you can use the Overviewer:
* Make sure the Minecraft client is installed. The Overviewer will find the
installed minecraft.jar and extract the textures from it.
* Install a texture file yourself. This file is called "terrain.png" and is
normally found in your minecraft.jar file (not "Minecraft.jar", the launcher,
but rather the file that's downloaded by the launcher and installed into a
hidden directory). You can also get this file from any of the third party
texture packs out there.
Biome Tinting
-------------
With the Halloween update, biomes were added to Minecraft. In order to get
biome-accurate tinting, the Overviewer can use biome data produced by the
Minecraft Biome Extractor tool. This tool can be downloaded from:
http://www.minecraftforum.net/viewtopic.php?f=25&t=80902
If the "biomes" folder is present in the world directory, then the Overviewer
will use the biome data to tint grass and leaves automatically -- there is no
command line option to turn this feature on. If this folder does not exist,
then the Overviewer will use a static tinting for grass and leaves.
Compiling the C Extension
-------------------------
The C Extension for Overviewer is no longer optional. In addition to
providing a higher quality image compositing function that looks better on
maps with lighting enabled, it now does the bulk of the rendering.
If you downloaded Overviewer as a binary package, this extension will already
be compiled for you.
If you have a C compiler and the Python development libraries set up, you can
compile this extension like this::
python setup.py build
Note that you need the development headers for your version of Python installed,
look for a package named 'python-dev', 'python-devel' or similar. Also, some
Python distributions do not install "Imaging.h" and "ImPlatform.h" properly. If
you get errors complaining about them, you can get them from the PIL source, or
at <http://svn.effbot.org/public/tags/pil-1.1.7/libImaging/>. Just put them in
the same directory as "overviewer.py".
For more detailed instructions, check the wiki:
https://github.com/overviewer/Minecraft-Overviewer/wiki/Build-Instructions
Running
-------
To generate a set of Google Map tiles, use the overviewer.py script like this::
python overviewer.py [OPTIONS] <World # / Name / Path to World> <Output Directory>
The output directory will be created if it doesn't exist. This will generate a
set of image tiles for your world in the directory you choose. When it's done,
you will find an index.html file in the same directory that you can use to view
it.
Options
-------
-h, --help
Shows the list of options and exits
--advanced-help
Display help - including advanced options
-p PROCS, --processes=PROCS
Adding the "-p" option will utilize more cores during processing. This
can speed up rendering quite a bit. The default is set to the same
number of cores in your computer, but you can adjust it.
Example to run 5 worker processes in parallel::
python overviewer.py -p 5 <Path to World> <Output Directory>
-d, --delete
This option changes the mode of execution. No tiles are rendered, and
instead, files are deleted.
*Note*: Currently only the overviewer.dat file is deleted when you run with
this option
--forcerender
Force re-rendering the entire map (or the given regionlist). This
is an easier way to completely re-render without deleting the map.
--regionlist=regionlist
Use this option to specify manually a list of regions to consider for
updating. Without this option, every chunk in every region is checked for
update and if necessary, re-rendered. If this option points to a file
containing, 1 per line, the path to a region data file, then only those
in the list will be considered for update.
It's up to you to build such a list. On Linux or Mac, try using the "find"
command. You could, for example, output all region files that are older than
a certain date. Or perhaps you can incrementally update your map by passing
in a subset of regions each time. It's up to you!
--rendermodes=MODE1[,MODE2,...]
Use this option to specify which render mode to use, such as lighting or
night. Use --list-rendermodes to get a list of available rendermodes, and
a short description of each. If you provide more than one mode (separated
by commas), Overviewer will render all of them at once, and provide a
toggle on the resulting map to switch between them.
If for some reason commas do not work for your shell (like if you're using
Powershell on Windows), you can also use a colon ':' or a forward slash '/'
to separate the modes.
--list-rendermodes
List the available render modes, and a short description of each.
--north-direction=NORTH_DIRECTION
Specifies which corner of the screen north will point to.
Valid options are: lower-left, upper-left, upper-right, lower-right.
If you do not specify this option, it will default to whatever direction
the existing map uses. For new maps, it defaults to lower-left for
historical reasons.
--settings=PATH
Use this option to load settings from a file. The format of this file is
given below.
Settings
--------
You can optionally store settings in a file named settings.py (or really,
anything you want). It is a regular python script, so you can use any python
functions or modules you want. To use a settings file, use the --settings
command line option.
For a sample settings file, look at 'sample.settings.py'. Note that this file
is not meant to be used directly, but instead it should be used as a
collection of examples to guide writing your own.
Here's a (possibly incomplete) list of available settings, which are available
in settings.py. Note that you can also set command-line options in a similar
way.
imgformat=FORMAT
Set the output image format used for the tiles. The default is 'png',
but 'jpg' is also supported.
zoom=ZOOM
The Overviewer by default will detect how many zoom levels are required
to show your entire map. This option sets it manually.
*You do not normally need to set this option!*
This is equivalent to setting the dimensions of the highest zoom level. It
does not actually change how the map is rendered, but rather *how much of
the map is rendered.* Setting this option too low *will crop your map.*
(Calling this option "zoom" may be a bit misleading, I know)
To be precise, it sets the width and height of the highest zoom level, in
tiles. A zoom level of z means the highest zoom level of your map will be
2^z by 2^z tiles.
This option map be useful if you have some outlier chunks causing your map
to be too large, or you want to render a smaller portion of your map,
instead of rendering everything.
Remember that each additional zoom level adds 4 times as many tiles as
the last. This can add up fast, zoom level 10 has over a million tiles.
Tiles with no content will not be rendered, but they still take a small
amount of time to process.
web_assets_hook
This option lets you define a function to run after the web assets have
been copied into the output directory, but before any tile rendering takes
place. This is an ideal time to do any custom postprocessing for
markers.js or other web assets.
This function should accept one argument: a QuadtreeGen object.
web_assets_path
This option lets you provide alternative web assets to use when
rendering. The contents of this folder will be copied into the output folder
during render, and will overwrite any default files already copied by
Overviewer. See the web_assets folder included with Overviewer for the
default assets.
textures_path
This is like web_assets_path, but instead it provides an alternative texture
source. Overviewer looks in here for terrain.png and other textures before
it looks anywhere else.
north_direction
Specifies which corner of the screen north will point to.
Valid options are: lower-left, upper-left, upper-right, lower-right.
Viewing the Results
-------------------
Within the output directory you will find two things: an index.html file, and a
@@ -290,44 +70,12 @@ however, bound by the Google Maps API terms of service.
http://code.google.com/apis/maps/terms.html
Crushing the Output Tiles
-------------------------
Image files taking too much disk space? Try using pngcrush. On Linux and
probably Mac, if you have pngcrush installed, this command will go and crush
all your images in the given destination. This took the total disk usage of the
render for my world from 85M to 67M.
::
find /path/to/destination -name "*.png" -exec pngcrush {} {}.crush \; -exec mv {}.crush {} \;
Or if you prefer a more parallel solution, try something like this::
find /path/to/destination -print0 | xargs -0 -n 1 -P <nr_procs> sh -c 'pngcrush $0 temp.$$ && mv temp.$$ $0'
If you're on Windows, I've gotten word that this command line snippet works
provided pngout is installed and on your path. Note that the % symbols will
need to be doubled up if this is in a batch file.
::
FOR /R c:\path\to\tiles\folder %v IN (*.png) DO pngout %v /y
Bugs
====
This program has bugs. They are mostly minor things, I wouldn't have released a
completely useless program. However, there are a number of things that I want
to fix or improve.
For a current list of issues, visit
http://github.com/overviewer/Minecraft-Overviewer/issues
https://github.com/overviewer/Minecraft-Overviewer/issues
Feel free to comment on issues, report new issues, and vote on issues that are
important to you, so I can prioritize accordingly.
An incomplete list of things I want to do soon is:
* Improve efficiency
* Some kind of graphical interface.
important to you.

View File

@@ -18,7 +18,8 @@ import re
import os.path
# incantation to be able to import overviewer_core
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
if not hasattr(sys, "frozen"):
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
from overviewer_core import world
from overviewer import list_worlds

View File

@@ -30,7 +30,8 @@ import os
import cPickle
# incantation to be able to import overviewer_core
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
if not hasattr(sys, "frozen"):
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
from overviewer_core import nbt

View File

@@ -5,7 +5,8 @@ Very basic player.dat inspection script
import sys, os
# incantation to be able to import overviewer_core
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
if not hasattr(sys, "frozen"):
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
from overviewer_core.nbt import load
from overviewer_core import items

View File

@@ -21,7 +21,8 @@ import sys,os
import re
# incantation to be able to import overviewer_core
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
if not hasattr(sys, "frozen"):
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
from overviewer_core import nbt
from overviewer_core import world

View File

@@ -9,7 +9,8 @@ import os
import sys
# incantation to be able to import overviewer_core
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
if not hasattr(sys, "frozen"):
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
from overviewer_core import nbt

View File

@@ -8,7 +8,8 @@ import os.path
import ast
# incantation to be able to import overviewer_core
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '.')))
if not hasattr(sys, "frozen"):
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '.')))
from overviewer_core import nbt

132
docs/Makefile Normal file
View File

@@ -0,0 +1,132 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
default: html
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
-rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Overviewer.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Overviewer.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/Overviewer"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Overviewer"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
make -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."

161
docs/building.rst Normal file
View File

@@ -0,0 +1,161 @@
===================================
Building the Overviewer from Source
===================================
These instructions are for building the C extension for Overviewer. Also note
that pre-built Windows and Debian executables are available in the `Downloads
<https://github.com/overviewer/Minecraft-Overviewer/downloads>`_ section. These
kits already contain the compiled extension and require no further setup (so you
can skip to the :doc:`Running <running>` section of the docs).
Get The Source
==============
First step: download the source! Either clone with Git or download the most recent snapshot
* URL to clone: ``git://github.com/overviewer/Minecraft-Overviewer.git``
* `Download most recent tar archive <https://github.com/overviewer/Minecraft-Overviewer/tarball/master>`_
* `Download most recent zip archive <https://github.com/overviewer/Minecraft-Overviewer/zipball/master>`_
Build Instructions For Various Operating Systems
================================================
.. contents::
:local:
Windows Build Instructions
--------------------------
First, you'll need a compiler. You can either use Visual Studio, or
cygwin/mingw. The free `Visual Studio Express
<http://www.microsoft.com/express/Windows/>`_ is okay. You will want the C++
version (Microsoft® Visual C++® 2010 Express). Note that the Express version of
Visual Studio will only build 32-bit executables. We currently don't have a
recommended way of building Overviewer on 64-bit Windows using free tools. If you
have bought a copy of Visual Studio, you can use it for 64-bit builds.
Prerequisits
~~~~~~~~~~~~
You will need a copy of the `PIL sources <http://www.pythonware.com/products/pil/>`_.
Building with Visual Studio
~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Get the latest Overviewer source code as per above.
2. From the Start menu, navigate to the 'Microsoft Visual Studio 2010 Express' and open the 'Visual Studio Command Prompt (2010)' shortcut.
3. cd to the folder containing the Overviewer source code.
4. Copy Imaging.h and ImPlatform.h from your PIL installation into the current working directory.
5. First try a build::
c:\python26\python setup.py build
If you encounter the following errors::
error: Unable to find vcvarsall.bat
then try the following::
set DISTUTILS_USE_SDK=1
set MSSdk=1
c:\python26\python setup.py build
If the build was successful, there should be a c_overviewer.pyd file in your current working directory.
Building with mingw
~~~~~~~~~~~~~~~~~~~
1. Open a MinGW shell.
2. cd to the Overviewer directory.
3. Copy Imaging.h and ImPlatform.h from your PIL installation into the current working directory.
4. Build::
python setup.py build --compiler=mingw32
Linux
-----
You will need the gcc compiler and a working build environment. On Ubuntu and
Debian, this can be done by installing the ``build-essential`` package. For
CentOS machines, see the :ref:`centos` section below
You will need the following packages (at least):
* python-imaging (for PIL)
* python-dev
* python-numpy
Then to build::
python setup.py build
OSX
---
1. Download the source code for PIL from http://www.pythonware.com/products/pil/
2. Compile the PIL code (``python ./setup.py build``)
3. Install PIL (``sudo python ./setup.py install``)
4. Find the path to libImaging in the PIL source tree
5. Build Minecraft Overviewer with the path from step 3 as the value for C_INCLUDE_PATH::
C_INCLUDE_PATH="path from step 3" python ./setup.py build
The following script (copied into your MCO source directory) should handle everything for you:
.. code-block:: bash
#!/bin/bash
# start with a clean place to work
python ./setup.py clean
# get PIL
if [ ! -d "`pwd`/Imaging-1.1.7/libImaging" ]; then
/usr/bin/curl -o imaging.tgz http://effbot.org/media/downloads/Imaging-1.1.7.tar.gz
tar xzf imaging.tgz
rm imaging.tgz
fi
# build MCO
C_INCLUDE_PATH="`pwd`/Imaging-1.1.7/libImaging" python ./setup.py build
.. _centos:
CentOS
------
Since CentOS has an older version of Python (2.4), there are some difficulties
in getting the Overviewer to work. Follow these steps which have been reported
to work.
Note: commands prefixed with a "#" mean to run as root, and "$" mean to run as a
regular user.
1. Install the `EPEL repo <http://fedoraproject.org/wiki/EPEL>`_. Go to step #2 if you already have the EPEL repo installed.
1. ``$ wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm``
2. ``# rpm -Uhv epel-release-5-4.noarch.rpm``
2. Install the python26 packages and build dependancies
1. ``# yum groupinstall -y 'Development Tools'``
2. ``# yum install -y python26{,-imaging,-numpy}{,-devel}``
3. Install and setup Overviewer
1. ``$ git clone git://github.com/overviewer/Minecraft-Overviewer.git``
2. ``$ cd Minecraft-Overviewer``
3. ``$ python26 setup.py build``
4. Change the first line of overviewer.py from ``#!/usr/bin/env python`` to ``#!/usr/bin/env python26`` so that the Python 2.6 interpreter is used instead of the default 2.4
4. Run Overviewer as usual
1. ``$ ./overviewer.py path/to/world/ path/to/output/`` or ``$ python26 path/to/overviewer.py path/to/world/ path/to/output/``
2. Proceed to the :doc:`Running <running>` instructions for more info.
Installing the Compiled Code
----------------------------
You can run the ``overviewer.py`` script from the build directory just fine. If
you'd like to install, run ``python setup.py install``

216
docs/conf.py Normal file
View File

@@ -0,0 +1,216 @@
# -*- coding: utf-8 -*-
#
# Overviewer documentation build configuration file, created by
# sphinx-quickstart on Thu Sep 22 10:19:03 2011.
#
# This file is execfile()d with the current directory set to its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys, os
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('..'))
# -- General configuration -----------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'Overviewer'
copyright = u'2010-2011 the Overviewer Team'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = "0.3"
# The full version, including alpha/beta/rc tags.
release = "0.3.0"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build']
# The reST default role (used for this markup: `text`) to use for all documents.
#default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# -- Options for HTML output ---------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'default'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# Output file base name for HTML help builder.
htmlhelp_basename = 'Overviewerdoc'
# -- Options for LaTeX output --------------------------------------------------
# The paper size ('letter' or 'a4').
#latex_paper_size = 'letter'
# The font size ('10pt', '11pt' or '12pt').
#latex_font_size = '10pt'
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
('index', 'Overviewer.tex', u'Overviewer Documentation',
u'The Overviewer Team', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# Additional stuff for the LaTeX preamble.
#latex_preamble = ''
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# If false, no module index is generated.
#latex_domain_indices = True
# -- Options for manual page output --------------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('index', 'overviewer', u'Overviewer Documentation',
[u'The Overviewer Team'], 1)
]

BIN
docs/design/cube_parts.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

433
docs/design/cube_parts.svg Normal file
View File

@@ -0,0 +1,433 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1131"
height="280.5"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="cube_parts.svg"
inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/cube_parts.png"
inkscape:export-xdpi="63.639942"
inkscape:export-ydpi="63.639942">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path4162"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-5"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4162-9"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="820.10257"
inkscape:cy="88.729116"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:window-width="1920"
inkscape:window-height="1003"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
showguides="true"
inkscape:guide-bbox="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid3360"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-59.5,-402.36219)">
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 330,542.36218 100,0"
id="path3386"
inkscape:connector-curvature="0" />
<g
id="g3080">
<image
width="240"
height="120"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAAB4CAYAAADMtn8nAAAABHNCSVQICAgIfAhkiAAABLZJREFU
eJzt3T2LXHUYhvGZnTnzuq8mqwtGRBsLIbVFCAQESwVtAhFcEAsRQQJpBSsFg4VJI0IIEUsL0UIs
1Fj5DWxiI+JmWZPJzu7M7Lzs+gVSXOgxu/d4/eqHc2Znzz2nuXn+1Yrm2qWr54/I3BeXb1f/68+i
8i0c9weQ9M8ZYCmYAZaCGWApmAGWghlgKZgBloIZYCmYAZaC2b45YV59/wXUnKLqDfYbfeb502Xe
tnL1la99th4B38BSMAMsBTPAUjADLAUzwFIwAywFM8BSMAMsBTPAUjDbMv/SxY/OoebU0SErWBXN
Opo7GEzQ3GQwRXOtpQLNVRfKfWSKNvt7b777o8/qQ/gGloIZYCmYAZaCGWApmAGWghlgKZgBloIZ
YCmYAZaC/e/aLZvXL6BKVL1RQ9cbD1nTaXGtieZq8L6D+yM01+yyhtVscojmelsDNLe03kZzg94B
u96pFpo7gM2zG+/8MBfPvm9gKZgBloIZYCmYAZaCGWApmAGWghlgKZgBloIZYCnYiW+jXPr4PGpO
TQ5m8IpsN1Wjw3Y1VavsK6QNoe5KA831/txHc81Fdr3uCmuKTWFjC34tlWqNDdJdYb2tPXZf+AGL
JmvG3bp8+1iy5BtYCmaApWAGWApmgKVgBlgKZoClYAZYCmaApWAGWApWenvkjU/ZzqnxPjtdr73K
mkTDXXY9ekog/WJai2znFFVvscZRf4ftpmotse+PNo4ebA/R3BLcAUbRBtiwz56DKnx1jWGDrgOf
0/Wnl9HcJ699ix5B38BSMAMsBTPAUjADLAUzwFIwAywFM8BSMAMsBTPAUrDq5jXWnKImY9Zc2Xh2
tczbVnZ+76O5Vpc1ZqjphO3iGsGG0BHc2UV14K6rWr3c3/L9++zUwaLF7ktPRaQef2YFzdG/gzo6
Yv/fLmyy+QaWghlgKZgBloIZYCmYAZaCGWApmAGWghlgKZgBloKVvhPr7ZsvoarJ3TsP0PXorqbV
JxfR3O5d1uhpL7NdV/xURGYyYtdb2eigucMpa/6MB6wp1lllDaH+DtudRTVa7P/RXGQ7xaYj1hgc
7rG5Cbxe0Waf79Z7P7kTS5p3BlgKZoClYAZYCmaApWAGWApmgKVgBlgKZoClYKU3scr21ucvoioR
bf4U8PS/zjJrHBUt1hSbTdnpeodwbu/eCM111lpobgB3P9HTHenfu/HcGpqrwlVh27/10NxjZ5bQ
3B+/3kNzX33wy7FkyTewFMwAS8EMsBTMAEvBDLAUzABLwQywFMwAS8EMsBTsxDexynbxw3Oo07NQ
Y19NrWC/gStPsB1We3+xRlmtYI2yCjztcDKEpyzu01MWmS7csbV8ijXK6GmR11//bi6efd/AUjAD
LAUzwFIwAywFM8BSMAMsBTPAUjADLAUzwFKwuWijHKfNaxdQ6ehwxrpJy+ttNLd1h+1+msHTCadD
drreU2dPo7lRf4zmagXbKfbZm9/7rD6Eb2ApmAGWghlgKZgBloIZYCmYAZaCGWApmAGWghlgKZjt
lhPmyjcv03VSyO4OO8Vwd3tQ5m0rX1752WfrEfANLAUzwFIwAywFM8BSMAMsBTPAUjADLAUzwFIw
AywF+xskAukuVl0skAAAAABJRU5ErkJggg==
"
id="image3075"
x="60"
y="407.36218" />
<path
inkscape:connector-curvature="0"
id="path4600"
d="m 60,477.36218 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 50,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0"
style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/cube_parts.png"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300" />
</g>
<g
id="g3928">
<image
width="120"
height="180"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAC0CAYAAABfTugdAAAABHNCSVQICAgIfAhkiAAABRJJREFU
eJzt3ctrXGUch/FzZk7mlrlkpumkiW1iE1prcWMg0I2hQgttsYIbdeFlZ2kFN10IQje6UBdFcCe4
dC9YsEjbhUopQitIaxo0lLEJ5jKZJJPpTCb3/gNdfBdpo1+ez/rHpOmTd/PjPWfCiz+e3g4El89c
DZU5/LfEdvsfgKeLwOYIbI7A5ghsjsDmCGyOwOYIbC6KLUiLrODjn85Kg2v1tvR5X715jc3YM8AJ
NkdgcwQ2R2BzBDZHYHMENkdgcwQ2F374zglpQ1UcTUofmB7OSXNz96vSXLPRkua+vXCLzdgTcILN
Edgcgc0R2ByBzRHYHIHNEdgcgc2Fl94alTZZtXhe+sB2ZlKaS/VrG6/24qo0F42mpLlSqijNfXH6
B4vNGCfYHIHNEdgcgc0R2ByBzRHYHIHNEdhclEhoC5t929rdqEO5QWnuRmpOmtsY055WDPZrf6ut
A9rv8cmV17UNX3NR+rxv3v51VzZjnGBzBDZHYHMENkdgcwQ2R2BzBDZHYHPRUN8eafCXPx5Icx3J
uDRXeqjdtSp0d0tzEz8vSHPNEWksePHMkDRXrGt31c5/H5M2Y425hvR53537XdqMcYLNEdgcgc0R
2ByBzRHYHIHNEdgcgc2FX58/JW1Ymi1t83RkYJ80N7YUSXOLk+PSXG1Zu7vVWNF+j+7XeqS57Epa
mpsJtPeCpUYy0lx8XTubnGBzBDZHYHMENkdgcwQ2R2BzBDZHYHNRZzohDU7PL0tzf1ampbliuVea
C3PaZiff2SnNJSLtb/re1X+lucXCAWmuu609XFgd1+6WZV/S3jPGCTZHYHMENkdgcwQ2R2BzBDZH
YHMENhctN7W7TPG49reQjLS7VrOTFWlufVv7uT1dWWkuFN9W9fIRbUMVhdKVtqDe1t40n17Q/v8a
N9ekOU6wOQKbI7A5ApsjsDkCmyOwOQKbI7C5qDKt3QFKJTqkuWJee9ouFtNWSlPVJWnut/sPpbnB
3pI0l0xoG6WjB7WnEGsT2l21bJf2HYyZzaQ0xwk2R2BzBDZHYHMENkdgcwQ2R2BzBDYXDfRod4Xq
4t2tyoz2XX7Dh5+T5spd2tOFs0tNaW5a3IxlO7VN0Z3xKWluc2tLmitktd+3r6zdQeMEmyOwOQKb
I7A5ApsjsDkCmyOwOQKbi7a2tafjHq1oT7OVC9r7qu4+mJHmDu3XvrswjGt3xqKy9p2EvTltc7e2
vinNZVPi+8iq2h25TEr7fTnB5ghsjsDmCGyOwOYIbI7A5ghsjsDmxLdGBcHn778qrbyGxM3T9dt/
S3P5tLax6e/Vfm5lti7NHXtB+w7Ge//MS3PDQ3uluZmNvDRX+WtMmuMEmyOwOQKbI7A5ApsjsDkC
myOwOQKbkzdZO+3L916RNmPzHdp3HKZb2ncN1uotaW5PQXvKb2NTu9PWaK5Ic/3PD0hzq+JdME6w
OQKbI7A5ApsjsDkCmyOwOQKbI7C5Xdtk7bTPzr0hrZQKwbL0eY/a2qZoqqp9Xi6tvcn9aL/2Rvpb
EzVpjhNsjsDmCGyOwOYIbI7A5ghsjsDmCGzOZpO10z5997i0GVuoa2+az4jvyRrs0zZZpSzfXYiA
wPYIbI7A5ghsjsDmCGyOwOYIbI5N1jNy+YOT0masvbohfV4prz39yAk2R2BzBDZHYHMENkdgcwQ2
R2BzBDbHJut/6qOzI9JmjBNsjsDmCGyOwOYIbI7A5ghsjsDmCGzuMUU/3WGHZptAAAAAAElFTkSu
QmCC
"
id="image3143"
x="60"
y="482.36218" />
<path
inkscape:connector-curvature="0"
id="path4602"
d="m 60,482.36218 10,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 10,0 0,120"
style="fill:none;stroke:#ff7e00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g3996">
<image
width="120"
height="180"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAC0CAYAAABfTugdAAAABHNCSVQICAgIfAhkiAAABPtJREFU
eJztnbFPnHUchw94oQfHAdcrpdiiKWKrDjbRLh100Zq4ODo5mnQzMXZwNtE/wMEE4x9gapxM2kWX
Jp1QYiKtjaaVllaEItwdUA64Uv+Fz4BiH59n/uTNe3nuu3zy/f3erpI8kXx4+a3HSa77n34ROVgU
DEfBcBQMR8FwFAxHwXAUDEfBcLoO+gX+L3xw6XzUPPUNl6Pn7T3YjXJOMBwFw1EwHAXDUTAcBcNR
MBwFw1EwnOKgX+C/ynufn4uap0p1IHrekcl6lNuaXY9ya1c7Uc4JhqNgOAqGo2A4CoajYDgKhqNg
OAqGg9nJ+ujK21HztNpei57XudqOcuXaoSjXvps1VOWHE1Gu/qgV5ZxgOAqGo2A4CoajYDgKhqNg
OAqGo2A4B7aTdeGrV6PmqV6pRc/bWH8Y5ToLO1nuRtZk7bzeF+XOVyej3G/tZpTr6slKSCcYjoLh
KBiOguEoGI6C4SgYjoLhKBhOvJP17vTLUfNUPVqNnjc5nO0eDQ5XotwPl3+KcnszWUM1VT0c5Zrt
bNeqNpI1cnfuP4hyr53JmjEnGI6C4SgYjoLhKBiOguEoGI6C4SgYTnHhm2w36lHvXvTA9Zns1NtS
aTnK3erfinLNK9mpwWp/dhpwrWcjytUmXohyz49k91qVOllupZXtoDnBcBQMR8FwFAxHwXAUDEfB
cBQMR8Fwit257Si4MZftHo2u9Ue5hXJUoJV6m9mO0tlTJ6LcTidr5Iru7P2G+7Lm6fr8YpTb3MpO
Px6tZ7tvTjAcBcNRMBwFw1EwHAXDUTAcBcNRMJyi91rWnDzdlzUnQ09luVNhk9UZz04hFt3Zf7Wc
XWtVWmpkO1nthfkoV61kpyTbPVkz1trMTkk6wXAUDEfBcBQMR8FwFAxHwXAUDEfBcIqxdLcnvGG8
s5s1Y8efGY9yN35finLbO1kDdHtxNcodOzwY5Y6MjkS54cFylFtpbUa5+fB3OMFwFAxHwXAUDEfB
cBQMR8FwFAxHwXCKk+PZTeR//JXtKDW3svubfrx5L8oNhQ1Qcz1rgF45fTzKjY1kO1SVgez9Zn+9
H+XKfdnnJMdqWdPmBMNRMBwFw1EwHAXDUTAcBcNRMBwFwykam9k9WWuNZpQbH82++bfRzna3xmvZ
zlijGI1yXd3ZjfQ9RdYo/Xz7zyhXDY81LjezRq46kN1c7wTDUTAcBcNRMBwFw1EwHAXDUTAcBcMp
llYaUXDqxZei3LEia4pmb2U3uQ8c6olyu/MLUa53bDjKzd68G+VaW7tR7o2zz0W5vcfZ/WEXv/wu
Ou7pBMNRMBwFw1EwHAXDUTAcBcNRMBwFwykG62NRcL2VNV7X5+9EuWol+8bh3PxylNtuZzegrzSy
/3RX/WSUe3Y3+ybhO598nV00ts84wXAUDEfBcBQMR8FwFAxHwXAUDEfBcIp7i9lu1LmpepRbKWf3
RjU2tqLcidGhKHd6Irvvq1nKnvfx9KUDaZ72GycYjoLhKBiOguEoGI6C4SgYjoLhKBhO8eaZ7Ab0
1Y3sPq2e8BuHfUV2arCzF8VK709/j2ie9hsnGI6C4SgYjoLhKBiOguEoGI6C4SgYTrHUzHajVlvZ
NwnrIwNR7tMvrtk8/Qs4wXAUDEfBcBQMR8FwFAxHwXAUDEfBcIpfwnuoPvt2xubpCcQJhqNgOAqG
o2A4CoajYDgKhqNgOAqG8zen7OzZX1IkEwAAAABJRU5ErkJggg==
"
id="image3991"
x="185"
y="482.36218" />
<path
inkscape:connector-curvature="0"
id="path4604"
d="m 305,482.36218 -10,0 0,10 -20,0 0,10 -20,0 0,10 -20,0 0,10 -20,0 0,10 -20,0 0,10 -10,0 0,120"
style="fill:none;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
transform="translate(380,5.0000026)"
id="g3080-9">
<image
width="240"
height="120"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAAB4CAYAAADMtn8nAAAABHNCSVQICAgIfAhkiAAABLZJREFU eJzt3T2LXHUYhvGZnTnzuq8mqwtGRBsLIbVFCAQESwVtAhFcEAsRQQJpBSsFg4VJI0IIEUsL0UIs 1Fj5DWxiI+JmWZPJzu7M7Lzs+gVSXOgxu/d4/eqHc2Znzz2nuXn+1Yrm2qWr54/I3BeXb1f/68+i 8i0c9weQ9M8ZYCmYAZaCGWApmAGWghlgKZgBloIZYCmYAZaC2b45YV59/wXUnKLqDfYbfeb502Xe tnL1la99th4B38BSMAMsBTPAUjADLAUzwFIwAywFM8BSMAMsBTPAUjDbMv/SxY/OoebU0SErWBXN Opo7GEzQ3GQwRXOtpQLNVRfKfWSKNvt7b777o8/qQ/gGloIZYCmYAZaCGWApmAGWghlgKZgBloIZ YCmYAZaC/e/aLZvXL6BKVL1RQ9cbD1nTaXGtieZq8L6D+yM01+yyhtVscojmelsDNLe03kZzg94B u96pFpo7gM2zG+/8MBfPvm9gKZgBloIZYCmYAZaCGWApmAGWghlgKZgBloIZYCnYiW+jXPr4PGpO TQ5m8IpsN1Wjw3Y1VavsK6QNoe5KA831/txHc81Fdr3uCmuKTWFjC34tlWqNDdJdYb2tPXZf+AGL JmvG3bp8+1iy5BtYCmaApWAGWApmgKVgBlgKZoClYAZYCmaApWAGWApWenvkjU/ZzqnxPjtdr73K mkTDXXY9ekog/WJai2znFFVvscZRf4ftpmotse+PNo4ebA/R3BLcAUbRBtiwz56DKnx1jWGDrgOf 0/Wnl9HcJ699ix5B38BSMAMsBTPAUjADLAUzwFIwAywFM8BSMAMsBTPAUrDq5jXWnKImY9Zc2Xh2 tczbVnZ+76O5Vpc1ZqjphO3iGsGG0BHc2UV14K6rWr3c3/L9++zUwaLF7ktPRaQef2YFzdG/gzo6 Yv/fLmyy+QaWghlgKZgBloIZYCmYAZaCGWApmAGWghlgKZgBloKVvhPr7ZsvoarJ3TsP0PXorqbV JxfR3O5d1uhpL7NdV/xURGYyYtdb2eigucMpa/6MB6wp1lllDaH+DtudRTVa7P/RXGQ7xaYj1hgc 7rG5Cbxe0Waf79Z7P7kTS5p3BlgKZoClYAZYCmaApWAGWApmgKVgBlgKZoClYKU3scr21ucvoioR bf4U8PS/zjJrHBUt1hSbTdnpeodwbu/eCM111lpobgB3P9HTHenfu/HcGpqrwlVh27/10NxjZ5bQ 3B+/3kNzX33wy7FkyTewFMwAS8EMsBTMAEvBDLAUzABLwQywFMwAS8EMsBTsxDexynbxw3Oo07NQ Y19NrWC/gStPsB1We3+xRlmtYI2yCjztcDKEpyzu01MWmS7csbV8ijXK6GmR11//bi6efd/AUjAD LAUzwFIwAywFM8BSMAMsBTPAUjADLAUzwFKwuWijHKfNaxdQ6ehwxrpJy+ttNLd1h+1+msHTCadD drreU2dPo7lRf4zmagXbKfbZm9/7rD6Eb2ApmAGWghlgKZgBloIZYCmYAZaCGWApmAGWghlgKZjt lhPmyjcv03VSyO4OO8Vwd3tQ5m0rX1752WfrEfANLAUzwFIwAywFM8BSMAMsBTPAUjADLAUzwFIw AywF+xskAukuVl0skAAAAABJRU5ErkJggg== "
id="image3075-2"
x="60"
y="407.36218" />
<path
inkscape:connector-curvature="0"
id="path4600-7"
d="m 60,477.36218 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 50,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0"
style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/cube_parts.png"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300" />
</g>
<g
transform="translate(375,2.6171874e-6)"
id="g3996-1">
<image
width="120"
height="180"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAC0CAYAAABfTugdAAAABHNCSVQICAgIfAhkiAAABPtJREFU eJztnbFPnHUchw94oQfHAdcrpdiiKWKrDjbRLh100Zq4ODo5mnQzMXZwNtE/wMEE4x9gapxM2kWX Jp1QYiKtjaaVllaEItwdUA64Uv+Fz4BiH59n/uTNe3nuu3zy/f3erpI8kXx4+a3HSa77n34ROVgU DEfBcBQMR8FwFAxHwXAUDEfBcLoO+gX+L3xw6XzUPPUNl6Pn7T3YjXJOMBwFw1EwHAXDUTAcBcNR MBwFw1EwnOKgX+C/ynufn4uap0p1IHrekcl6lNuaXY9ya1c7Uc4JhqNgOAqGo2A4CoajYDgKhqNg OAqGg9nJ+ujK21HztNpei57XudqOcuXaoSjXvps1VOWHE1Gu/qgV5ZxgOAqGo2A4CoajYDgKhqNg OAqGo2A4B7aTdeGrV6PmqV6pRc/bWH8Y5ToLO1nuRtZk7bzeF+XOVyej3G/tZpTr6slKSCcYjoLh KBiOguEoGI6C4SgYjoLhKBhOvJP17vTLUfNUPVqNnjc5nO0eDQ5XotwPl3+KcnszWUM1VT0c5Zrt bNeqNpI1cnfuP4hyr53JmjEnGI6C4SgYjoLhKBiOguEoGI6C4SgYTnHhm2w36lHvXvTA9Zns1NtS aTnK3erfinLNK9mpwWp/dhpwrWcjytUmXohyz49k91qVOllupZXtoDnBcBQMR8FwFAxHwXAUDEfB cBQMR8Fwit257Si4MZftHo2u9Ue5hXJUoJV6m9mO0tlTJ6LcTidr5Iru7P2G+7Lm6fr8YpTb3MpO Px6tZ7tvTjAcBcNRMBwFw1EwHAXDUTAcBcNRMJyi91rWnDzdlzUnQ09luVNhk9UZz04hFt3Zf7Wc XWtVWmpkO1nthfkoV61kpyTbPVkz1trMTkk6wXAUDEfBcBQMR8FwFAxHwXAUDEfBcIqxdLcnvGG8 s5s1Y8efGY9yN35finLbO1kDdHtxNcodOzwY5Y6MjkS54cFylFtpbUa5+fB3OMFwFAxHwXAUDEfB cBQMR8FwFAxHwXCKk+PZTeR//JXtKDW3svubfrx5L8oNhQ1Qcz1rgF45fTzKjY1kO1SVgez9Zn+9 H+XKfdnnJMdqWdPmBMNRMBwFw1EwHAXDUTAcBcNRMBwFwykam9k9WWuNZpQbH82++bfRzna3xmvZ zlijGI1yXd3ZjfQ9RdYo/Xz7zyhXDY81LjezRq46kN1c7wTDUTAcBcNRMBwFw1EwHAXDUTAcBcMp llYaUXDqxZei3LEia4pmb2U3uQ8c6olyu/MLUa53bDjKzd68G+VaW7tR7o2zz0W5vcfZ/WEXv/wu Ou7pBMNRMBwFw1EwHAXDUTAcBcNRMBwFwykG62NRcL2VNV7X5+9EuWol+8bh3PxylNtuZzegrzSy /3RX/WSUe3Y3+ybhO598nV00ts84wXAUDEfBcBQMR8FwFAxHwXAUDEfBcIp7i9lu1LmpepRbKWf3 RjU2tqLcidGhKHd6Irvvq1nKnvfx9KUDaZ72GycYjoLhKBiOguEoGI6C4SgYjoLhKBhO8eaZ7Ab0 1Y3sPq2e8BuHfUV2arCzF8VK709/j2ie9hsnGI6C4SgYjoLhKBiOguEoGI6C4SgYTrHUzHajVlvZ NwnrIwNR7tMvrtk8/Qs4wXAUDEfBcBQMR8FwFAxHwXAUDEfBcIpfwnuoPvt2xubpCcQJhqNgOAqG o2A4CoajYDgKhqNgOAqG8zen7OzZX1IkEwAAAABJRU5ErkJggg== "
id="image3991-0"
x="185"
y="482.36218" />
<path
inkscape:connector-curvature="0"
id="path4604-3"
d="m 305,482.36218 -10,0 0,10 -20,0 0,10 -20,0 0,10 -20,0 0,10 -20,0 0,10 -20,0 0,10 -10,0 0,120"
style="fill:none;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
transform="translate(380,2.6171874e-6)"
id="g3928-7">
<image
width="120"
height="180"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAC0CAYAAABfTugdAAAABHNCSVQICAgIfAhkiAAABRJJREFU eJzt3ctrXGUch/FzZk7mlrlkpumkiW1iE1prcWMg0I2hQgttsYIbdeFlZ2kFN10IQje6UBdFcCe4 dC9YsEjbhUopQitIaxo0lLEJ5jKZJJPpTCb3/gNdfBdpo1+ez/rHpOmTd/PjPWfCiz+e3g4El89c DZU5/LfEdvsfgKeLwOYIbI7A5ghsjsDmCGyOwOYIbC6KLUiLrODjn85Kg2v1tvR5X715jc3YM8AJ NkdgcwQ2R2BzBDZHYHMENkdgcwQ2F374zglpQ1UcTUofmB7OSXNz96vSXLPRkua+vXCLzdgTcILN Edgcgc0R2ByBzRHYHIHNEdgcgc2Fl94alTZZtXhe+sB2ZlKaS/VrG6/24qo0F42mpLlSqijNfXH6 B4vNGCfYHIHNEdgcgc0R2ByBzRHYHIHNEdhclEhoC5t929rdqEO5QWnuRmpOmtsY055WDPZrf6ut A9rv8cmV17UNX3NR+rxv3v51VzZjnGBzBDZHYHMENkdgcwQ2R2BzBDZHYHPRUN8eafCXPx5Icx3J uDRXeqjdtSp0d0tzEz8vSHPNEWksePHMkDRXrGt31c5/H5M2Y425hvR53537XdqMcYLNEdgcgc0R 2ByBzRHYHIHNEdgcgc2FX58/JW1Ymi1t83RkYJ80N7YUSXOLk+PSXG1Zu7vVWNF+j+7XeqS57Epa mpsJtPeCpUYy0lx8XTubnGBzBDZHYHMENkdgcwQ2R2BzBDZHYHNRZzohDU7PL0tzf1ampbliuVea C3PaZiff2SnNJSLtb/re1X+lucXCAWmuu609XFgd1+6WZV/S3jPGCTZHYHMENkdgcwQ2R2BzBDZH YHMENhctN7W7TPG49reQjLS7VrOTFWlufVv7uT1dWWkuFN9W9fIRbUMVhdKVtqDe1t40n17Q/v8a N9ekOU6wOQKbI7A5ApsjsDkCmyOwOQKbI7C5qDKt3QFKJTqkuWJee9ouFtNWSlPVJWnut/sPpbnB 3pI0l0xoG6WjB7WnEGsT2l21bJf2HYyZzaQ0xwk2R2BzBDZHYHMENkdgcwQ2R2BzBDYXDfRod4Xq 4t2tyoz2XX7Dh5+T5spd2tOFs0tNaW5a3IxlO7VN0Z3xKWluc2tLmitktd+3r6zdQeMEmyOwOQKb I7A5ApsjsDkCmyOwOQKbi7a2tafjHq1oT7OVC9r7qu4+mJHmDu3XvrswjGt3xqKy9p2EvTltc7e2 vinNZVPi+8iq2h25TEr7fTnB5ghsjsDmCGyOwOYIbI7A5ghsjsDmxLdGBcHn778qrbyGxM3T9dt/ S3P5tLax6e/Vfm5lti7NHXtB+w7Ge//MS3PDQ3uluZmNvDRX+WtMmuMEmyOwOQKbI7A5ApsjsDkC myOwOQKbkzdZO+3L916RNmPzHdp3HKZb2ncN1uotaW5PQXvKb2NTu9PWaK5Ic/3PD0hzq+JdME6w OQKbI7A5ApsjsDkCmyOwOQKbI7C5Xdtk7bTPzr0hrZQKwbL0eY/a2qZoqqp9Xi6tvcn9aL/2Rvpb EzVpjhNsjsDmCGyOwOYIbI7A5ghsjsDmCGzOZpO10z5997i0GVuoa2+az4jvyRrs0zZZpSzfXYiA wPYIbI7A5ghsjsDmCGyOwOYIbI5N1jNy+YOT0masvbohfV4prz39yAk2R2BzBDZHYHMENkdgcwQ2 R2BzBDbHJut/6qOzI9JmjBNsjsDmCGyOwOYIbI7A5ghsjsDmCGzuMUU/3WGHZptAAAAAAElFTkSu QmCC "
id="image3143-1"
x="60"
y="482.36218" />
<path
inkscape:connector-curvature="0"
id="path4602-3"
d="m 60,482.36218 10,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 10,0 0,120"
style="fill:none;stroke:#ff7e00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
transform="translate(830,-4.9999974)"
id="g3080-9-1">
<image
width="240"
height="120"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAAB4CAYAAADMtn8nAAAABHNCSVQICAgIfAhkiAAABLZJREFU eJzt3T2LXHUYhvGZnTnzuq8mqwtGRBsLIbVFCAQESwVtAhFcEAsRQQJpBSsFg4VJI0IIEUsL0UIs 1Fj5DWxiI+JmWZPJzu7M7Lzs+gVSXOgxu/d4/eqHc2Znzz2nuXn+1Yrm2qWr54/I3BeXb1f/68+i 8i0c9weQ9M8ZYCmYAZaCGWApmAGWghlgKZgBloIZYCmYAZaC2b45YV59/wXUnKLqDfYbfeb502Xe tnL1la99th4B38BSMAMsBTPAUjADLAUzwFIwAywFM8BSMAMsBTPAUjDbMv/SxY/OoebU0SErWBXN Opo7GEzQ3GQwRXOtpQLNVRfKfWSKNvt7b777o8/qQ/gGloIZYCmYAZaCGWApmAGWghlgKZgBloIZ YCmYAZaC/e/aLZvXL6BKVL1RQ9cbD1nTaXGtieZq8L6D+yM01+yyhtVscojmelsDNLe03kZzg94B u96pFpo7gM2zG+/8MBfPvm9gKZgBloIZYCmYAZaCGWApmAGWghlgKZgBloIZYCnYiW+jXPr4PGpO TQ5m8IpsN1Wjw3Y1VavsK6QNoe5KA831/txHc81Fdr3uCmuKTWFjC34tlWqNDdJdYb2tPXZf+AGL JmvG3bp8+1iy5BtYCmaApWAGWApmgKVgBlgKZoClYAZYCmaApWAGWApWenvkjU/ZzqnxPjtdr73K mkTDXXY9ekog/WJai2znFFVvscZRf4ftpmotse+PNo4ebA/R3BLcAUbRBtiwz56DKnx1jWGDrgOf 0/Wnl9HcJ699ix5B38BSMAMsBTPAUjADLAUzwFIwAywFM8BSMAMsBTPAUrDq5jXWnKImY9Zc2Xh2 tczbVnZ+76O5Vpc1ZqjphO3iGsGG0BHc2UV14K6rWr3c3/L9++zUwaLF7ktPRaQef2YFzdG/gzo6 Yv/fLmyy+QaWghlgKZgBloIZYCmYAZaCGWApmAGWghlgKZgBloKVvhPr7ZsvoarJ3TsP0PXorqbV JxfR3O5d1uhpL7NdV/xURGYyYtdb2eigucMpa/6MB6wp1lllDaH+DtudRTVa7P/RXGQ7xaYj1hgc 7rG5Cbxe0Waf79Z7P7kTS5p3BlgKZoClYAZYCmaApWAGWApmgKVgBlgKZoClYKU3scr21ucvoioR bf4U8PS/zjJrHBUt1hSbTdnpeodwbu/eCM111lpobgB3P9HTHenfu/HcGpqrwlVh27/10NxjZ5bQ 3B+/3kNzX33wy7FkyTewFMwAS8EMsBTMAEvBDLAUzABLwQywFMwAS8EMsBTsxDexynbxw3Oo07NQ Y19NrWC/gStPsB1We3+xRlmtYI2yCjztcDKEpyzu01MWmS7csbV8ijXK6GmR11//bi6efd/AUjAD LAUzwFIwAywFM8BSMAMsBTPAUjADLAUzwFKwuWijHKfNaxdQ6ehwxrpJy+ttNLd1h+1+msHTCadD drreU2dPo7lRf4zmagXbKfbZm9/7rD6Eb2ApmAGWghlgKZgBloIZYCmYAZaCGWApmAGWghlgKZjt lhPmyjcv03VSyO4OO8Vwd3tQ5m0rX1752WfrEfANLAUzwFIwAywFM8BSMAMsBTPAUjADLAUzwFIw AywF+xskAukuVl0skAAAAABJRU5ErkJggg== "
id="image3075-2-9"
x="60"
y="407.36218" />
<path
inkscape:connector-curvature="0"
id="path4600-7-4"
d="m 60,477.36218 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 50,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0"
style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/cube_parts.png"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300" />
</g>
<g
transform="translate(825,-19.999997)"
id="g3996-1-5">
<image
width="120"
height="180"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAC0CAYAAABfTugdAAAABHNCSVQICAgIfAhkiAAABPtJREFU eJztnbFPnHUchw94oQfHAdcrpdiiKWKrDjbRLh100Zq4ODo5mnQzMXZwNtE/wMEE4x9gapxM2kWX Jp1QYiKtjaaVllaEItwdUA64Uv+Fz4BiH59n/uTNe3nuu3zy/f3erpI8kXx4+a3HSa77n34ROVgU DEfBcBQMR8FwFAxHwXAUDEfBcLoO+gX+L3xw6XzUPPUNl6Pn7T3YjXJOMBwFw1EwHAXDUTAcBcNR MBwFw1EwnOKgX+C/ynufn4uap0p1IHrekcl6lNuaXY9ya1c7Uc4JhqNgOAqGo2A4CoajYDgKhqNg OAqGg9nJ+ujK21HztNpei57XudqOcuXaoSjXvps1VOWHE1Gu/qgV5ZxgOAqGo2A4CoajYDgKhqNg OAqGo2A4B7aTdeGrV6PmqV6pRc/bWH8Y5ToLO1nuRtZk7bzeF+XOVyej3G/tZpTr6slKSCcYjoLh KBiOguEoGI6C4SgYjoLhKBhOvJP17vTLUfNUPVqNnjc5nO0eDQ5XotwPl3+KcnszWUM1VT0c5Zrt bNeqNpI1cnfuP4hyr53JmjEnGI6C4SgYjoLhKBiOguEoGI6C4SgYTnHhm2w36lHvXvTA9Zns1NtS aTnK3erfinLNK9mpwWp/dhpwrWcjytUmXohyz49k91qVOllupZXtoDnBcBQMR8FwFAxHwXAUDEfB cBQMR8Fwit257Si4MZftHo2u9Ue5hXJUoJV6m9mO0tlTJ6LcTidr5Iru7P2G+7Lm6fr8YpTb3MpO Px6tZ7tvTjAcBcNRMBwFw1EwHAXDUTAcBcNRMJyi91rWnDzdlzUnQ09luVNhk9UZz04hFt3Zf7Wc XWtVWmpkO1nthfkoV61kpyTbPVkz1trMTkk6wXAUDEfBcBQMR8FwFAxHwXAUDEfBcIqxdLcnvGG8 s5s1Y8efGY9yN35finLbO1kDdHtxNcodOzwY5Y6MjkS54cFylFtpbUa5+fB3OMFwFAxHwXAUDEfB cBQMR8FwFAxHwXCKk+PZTeR//JXtKDW3svubfrx5L8oNhQ1Qcz1rgF45fTzKjY1kO1SVgez9Zn+9 H+XKfdnnJMdqWdPmBMNRMBwFw1EwHAXDUTAcBcNRMBwFwykam9k9WWuNZpQbH82++bfRzna3xmvZ zlijGI1yXd3ZjfQ9RdYo/Xz7zyhXDY81LjezRq46kN1c7wTDUTAcBcNRMBwFw1EwHAXDUTAcBcMp llYaUXDqxZei3LEia4pmb2U3uQ8c6olyu/MLUa53bDjKzd68G+VaW7tR7o2zz0W5vcfZ/WEXv/wu Ou7pBMNRMBwFw1EwHAXDUTAcBcNRMBwFwykG62NRcL2VNV7X5+9EuWol+8bh3PxylNtuZzegrzSy /3RX/WSUe3Y3+ybhO598nV00ts84wXAUDEfBcBQMR8FwFAxHwXAUDEfBcIp7i9lu1LmpepRbKWf3 RjU2tqLcidGhKHd6Irvvq1nKnvfx9KUDaZ72GycYjoLhKBiOguEoGI6C4SgYjoLhKBhO8eaZ7Ab0 1Y3sPq2e8BuHfUV2arCzF8VK709/j2ie9hsnGI6C4SgYjoLhKBiOguEoGI6C4SgYTrHUzHajVlvZ NwnrIwNR7tMvrtk8/Qs4wXAUDEfBcBQMR8FwFAxHwXAUDEfBcIpfwnuoPvt2xubpCcQJhqNgOAqG o2A4CoajYDgKhqNgOAqG8zen7OzZX1IkEwAAAABJRU5ErkJggg== "
id="image3991-0-9"
x="185"
y="482.36218" />
<path
inkscape:connector-curvature="0"
id="path4604-3-5"
d="m 305,482.36218 -10,0 0,10 -20,0 0,10 -20,0 0,10 -20,0 0,10 -20,0 0,10 -20,0 0,10 -10,0 0,120"
style="fill:none;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
transform="translate(830,-19.999997)"
id="g3928-7-2">
<image
width="120"
height="180"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAC0CAYAAABfTugdAAAABHNCSVQICAgIfAhkiAAABRJJREFU eJzt3ctrXGUch/FzZk7mlrlkpumkiW1iE1prcWMg0I2hQgttsYIbdeFlZ2kFN10IQje6UBdFcCe4 dC9YsEjbhUopQitIaxo0lLEJ5jKZJJPpTCb3/gNdfBdpo1+ez/rHpOmTd/PjPWfCiz+e3g4El89c DZU5/LfEdvsfgKeLwOYIbI7A5ghsjsDmCGyOwOYIbC6KLUiLrODjn85Kg2v1tvR5X715jc3YM8AJ NkdgcwQ2R2BzBDZHYHMENkdgcwQ2F374zglpQ1UcTUofmB7OSXNz96vSXLPRkua+vXCLzdgTcILN Edgcgc0R2ByBzRHYHIHNEdgcgc2Fl94alTZZtXhe+sB2ZlKaS/VrG6/24qo0F42mpLlSqijNfXH6 B4vNGCfYHIHNEdgcgc0R2ByBzRHYHIHNEdhclEhoC5t929rdqEO5QWnuRmpOmtsY055WDPZrf6ut A9rv8cmV17UNX3NR+rxv3v51VzZjnGBzBDZHYHMENkdgcwQ2R2BzBDZHYHPRUN8eafCXPx5Icx3J uDRXeqjdtSp0d0tzEz8vSHPNEWksePHMkDRXrGt31c5/H5M2Y425hvR53537XdqMcYLNEdgcgc0R 2ByBzRHYHIHNEdgcgc2FX58/JW1Ymi1t83RkYJ80N7YUSXOLk+PSXG1Zu7vVWNF+j+7XeqS57Epa mpsJtPeCpUYy0lx8XTubnGBzBDZHYHMENkdgcwQ2R2BzBDZHYHNRZzohDU7PL0tzf1ampbliuVea C3PaZiff2SnNJSLtb/re1X+lucXCAWmuu609XFgd1+6WZV/S3jPGCTZHYHMENkdgcwQ2R2BzBDZH YHMENhctN7W7TPG49reQjLS7VrOTFWlufVv7uT1dWWkuFN9W9fIRbUMVhdKVtqDe1t40n17Q/v8a N9ekOU6wOQKbI7A5ApsjsDkCmyOwOQKbI7C5qDKt3QFKJTqkuWJee9ouFtNWSlPVJWnut/sPpbnB 3pI0l0xoG6WjB7WnEGsT2l21bJf2HYyZzaQ0xwk2R2BzBDZHYHMENkdgcwQ2R2BzBDYXDfRod4Xq 4t2tyoz2XX7Dh5+T5spd2tOFs0tNaW5a3IxlO7VN0Z3xKWluc2tLmitktd+3r6zdQeMEmyOwOQKb I7A5ApsjsDkCmyOwOQKbi7a2tafjHq1oT7OVC9r7qu4+mJHmDu3XvrswjGt3xqKy9p2EvTltc7e2 vinNZVPi+8iq2h25TEr7fTnB5ghsjsDmCGyOwOYIbI7A5ghsjsDmxLdGBcHn778qrbyGxM3T9dt/ S3P5tLax6e/Vfm5lti7NHXtB+w7Ge//MS3PDQ3uluZmNvDRX+WtMmuMEmyOwOQKbI7A5ApsjsDkC myOwOQKbkzdZO+3L916RNmPzHdp3HKZb2ncN1uotaW5PQXvKb2NTu9PWaK5Ic/3PD0hzq+JdME6w OQKbI7A5ApsjsDkCmyOwOQKbI7C5Xdtk7bTPzr0hrZQKwbL0eY/a2qZoqqp9Xi6tvcn9aL/2Rvpb EzVpjhNsjsDmCGyOwOYIbI7A5ghsjsDmCGzOZpO10z5997i0GVuoa2+az4jvyRrs0zZZpSzfXYiA wPYIbI7A5ghsjsDmCGyOwOYIbI5N1jNy+YOT0masvbohfV4prz39yAk2R2BzBDZHYHMENkdgcwQ2 R2BzBDbHJut/6qOzI9JmjBNsjsDmCGyOwOYIbI7A5ghsjsDmCGzuMUU/3WGHZptAAAAAAElFTkSu QmCC "
id="image3143-1-0"
x="60"
y="482.36218" />
<path
inkscape:connector-curvature="0"
id="path4602-3-6"
d="m 60,482.36218 10,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 10,0 0,120"
style="fill:none;stroke:#ff7e00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 890,472.36218 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 50,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0"
id="path4600-6-4"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 760,527.36218 100,0"
id="path3386-6"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="990"
y="677.36218"
id="text4768"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4770"
x="990"
y="677.36218">24</tspan></text>
<text
xml:space="preserve"
style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="1150"
y="537.36218"
id="text4768-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4770-6"
x="1150"
y="537.36218">24</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 890,662.36218 95,0"
id="path4797"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1035,662.36218 95,0"
id="path4799"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1170,542.36218 0,100"
id="path4801"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1170,507.36218 0,-100"
id="path4803"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1190,407.36218 -40,0"
id="path4805"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1150,642.36218 40,0"
id="path4807"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1130,642.36218 0,40"
id="path4809"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 890,642.36218 0,40"
id="path4811"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="685"
y="547.36218"
id="text4768-3-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4770-6-5"
x="685"
y="547.36218">25</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 705,562.36218 0,100"
id="path4801-6"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 705,512.36218 0,-100"
id="path4803-1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 725,412.36218 -40,0"
id="path4805-1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 680,662.36218 40,0"
id="path4807-5"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 29 KiB

BIN
docs/design/cube_sides.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
docs/design/cube_top.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,286 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="215.06604"
height="134.61028"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="cube_horizontal_offset.svg"
inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/cubepositionimgs/cube_horizontal_offset.png"
inkscape:export-xdpi="90.015251"
inkscape:export-ydpi="90.015251">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284272"
inkscape:cx="196.05813"
inkscape:cy="47.86508"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showguides="true"
inkscape:snap-global="true"
inkscape:window-width="1920"
inkscape:window-height="1003"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
showborder="false"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3755"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(182.57291,-428.70349)">
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-137.07291"
y="443.54724"
id="text3412"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3414"
x="-137.07291"
y="443.54724">24</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -112.07291,438.54726 38.000003,0"
id="path3416"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -142.07291,438.54726 -40,0"
id="path3418"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -182.07291,433.54726 0,10"
id="path3420"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -74.072907,433.54726 0,10"
id="path3422"
inkscape:connector-curvature="0" />
<g
id="g3792"
transform="translate(18.966966,-155.2665)">
<rect
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
y="771.25336"
x="608.28253"
height="59.181324"
width="59.181324"
id="rect3021"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2"
d="m -93.006853,691.08025 -53.032997,26.2665 -53.03301,-26.2665"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041"
d="m -199.03985,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4"
d="m -93.039853,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0"
d="m -146.03985,664.81375 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g3792-6"
transform="translate(124.99998,-154.99999)">
<rect
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
y="771.25336"
x="608.28253"
height="59.181324"
width="59.181324"
id="rect3021-0"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-5"
d="m -93.006853,691.08025 -53.032997,26.2665 -53.03301,-26.2665"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-02"
d="m -199.03985,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4-9"
d="m -93.039853,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0-4"
d="m -146.03985,664.81375 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g3792-6-3"
transform="translate(293.46696,-178.96697)">
<rect
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
y="771.25336"
x="608.28253"
height="59.181324"
width="59.181324"
id="rect3021-0-0"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-5-3"
d="m -93.006853,691.08025 -53.032997,26.2665 -53.03301,-26.2665"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-02-0"
d="m -199.03985,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4-9-9"
d="m -93.039853,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0-4-2"
d="m -146.03985,664.81375 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g3792-6-9"
transform="translate(293.46698,-126.43396)">
<rect
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
y="771.25336"
x="608.28253"
height="59.181324"
width="59.181324"
id="rect3021-0-4"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-5-6"
d="m -93.006853,691.08025 -53.032997,26.2665 -53.03301,-26.2665"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-02-9"
d="m -199.03985,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4-9-2"
d="m -93.039853,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0-4-24"
d="m -146.03985,664.81375 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="208.42709"
y="466.31375"
id="text3772"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3774"
x="208.42709"
y="466.31375">12</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 222.42709,433.31377 0,12.99999"
id="path3776"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 400,4.6102753 10,0"
id="path3778"
inkscape:connector-curvature="0"
transform="translate(-182.57291,428.70349)" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 405,39.610275 0,17"
id="path3780"
inkscape:connector-curvature="0"
transform="translate(-182.57291,428.70349)" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 400,56.610275 10,0"
id="path3782"
inkscape:connector-curvature="0"
transform="translate(-182.57291,428.70349)" />
<rect
style="fill:none;stroke:#00ff00;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4554"
width="106.39062"
height="104.99996"
x="-73.963531"
y="457.31375" />
<rect
style="fill:none;stroke:#00ff00;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4554-4"
width="106.39062"
height="104.99996"
x="94.036476"
y="485.31375" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,418 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="215.06604"
height="134.61028"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="cube_measurements.svg"
inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/cubepositionimgs/cube_measurements.png"
inkscape:export-xdpi="100.02"
inkscape:export-ydpi="100.02">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Mend"
style="overflow:visible;">
<path
id="path3809"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
transform="scale(0.4) rotate(180) translate(10,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284272"
inkscape:cx="88.787808"
inkscape:cy="39.780751"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showguides="true"
inkscape:snap-global="true"
inkscape:window-width="1920"
inkscape:window-height="1003"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
showborder="false"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3755"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(182.57291,-428.70349)">
<g
id="g3792-6"
transform="translate(11.46694,-150.49998)"
style="fill:none">
<rect
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
y="771.25336"
x="608.28253"
height="59.181324"
width="59.181324"
id="rect3021-0"
style="fill:none;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-5"
d="m -93.006853,691.08025 -53.032997,26.2665 -53.03301,-26.2665"
style="fill:none;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-02"
d="m -199.03985,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4-9"
d="m -93.039853,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0-4"
d="m -146.03985,664.81375 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-5-2"
d="m -81.53991,541.58027 -53.033,-26.2665 -53.03301,26.2665"
style="fill:none;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:1.4" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-222.57291"
y="523.31378"
id="text4492"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4494"
x="-222.57291"
y="523.31378">24</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-146.57291"
y="453.31375"
id="text4496"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4498"
x="-146.57291"
y="453.31375">24</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -25,99.610275 0,38.000005"
id="path4500"
inkscape:connector-curvature="0"
transform="translate(-182.57291,428.70349)" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -207.57291,506.31377 0,-45.00001"
id="path4502"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -212.57291,461.31377 10,0"
id="path4504"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -30,137.61028 10,0"
id="path4506"
inkscape:connector-curvature="0"
transform="translate(-182.57291,428.70349)" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -148.57291,446.31376 -40,0"
id="path4529"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -6,12.610275 0,10"
id="path4531"
inkscape:connector-curvature="0"
transform="translate(-182.57291,428.70349)" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -119.57292,446.31377 38.000006,0"
id="path4529-9"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -81.57291,441.31377 0,10"
id="path4531-8"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-72.572906"
y="559.31378"
id="text4554"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4556"
x="-72.572906"
y="559.31378">6</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-77.572906"
y="519.31378"
id="text4554-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4556-1"
x="-77.572906"
y="519.31378">12</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-72.572906"
y="482.31375"
id="text4554-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4556-7"
x="-72.572906"
y="482.31375">6</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -67.57291,566.31377 0,-6"
id="path4588"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -67.57291,545.31374 0,-23"
id="path4590"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -67.57291,506.31377 0,-23.00001"
id="path4592"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -67.57291,469.31376 0,-8"
id="path4594"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 110,32.610275 10,0"
id="path4596"
inkscape:connector-curvature="0"
transform="translate(-182.57291,428.70349)" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -72.57291,488.31377 10,0"
id="path4596-1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -72.57291,540.31377 10,0"
id="path4596-7"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -72.57291,566.31377 10,0"
id="path4596-72"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ff0000;stroke-width:0.50000000000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 182,85.610275 63,0"
id="path4763"
inkscape:connector-curvature="0"
transform="translate(-182.57291,428.70349)" />
<g
id="g3792-6-5"
transform="translate(145.46694,-150.49998)"
style="fill:none">
<rect
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
y="771.25336"
x="608.28253"
height="59.181324"
width="59.181324"
id="rect3021-0-9"
style="fill:none;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-5-3"
d="m -93.006853,691.08025 -53.032997,26.2665 -53.03301,-26.2665"
style="fill:none;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-02-3"
d="m -199.03985,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4-9-0"
d="m -93.039853,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0-4-6"
d="m -146.03985,664.81375 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-5-2-5"
d="m 52.46009,540.58027 -53.033,-26.2665 -53.03301,26.2665"
style="fill:none;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:1.4" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="57.42709"
y="491.31375"
id="text4554-3-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4556-1-0"
x="57.42709"
y="491.31375">12</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 67.42709,533.31378 0,-41"
id="path4590-2"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 67.42709,477.31377 0,-16"
id="path4592-3"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 62.42709,461.31377 10,0"
id="path4596-1-8"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 62.42709,514.31377 10,0"
id="path4596-7-3"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="57.42709"
y="548.31378"
id="text4554-3-5-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4556-1-0-0"
x="57.42709"
y="548.31378">12</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 67.42709,566.31376 0,-15"
id="path4590-2-7"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 62.42709,566.31377 10,0"
id="path4596-7-3-7"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-117.57291"
y="588.31378"
id="text4554-3-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4556-1-4"
x="-117.57291"
y="588.31378">12</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -117.57291,583.31377 -32,0"
id="path4529-0"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -134.57291,578.31378 0,10"
id="path4531-6"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -81.57291,583.31377 -16,0"
id="path4529-0-1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -81.57291,578.31377 0,10"
id="path4531-6-9"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-170.57291"
y="588.31378"
id="text4554-3-0-2"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4556-1-4-1"
x="-170.57291"
y="588.31378">12</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -171.57291,583.31377 -17,0"
id="path4529-0-8"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -188.57291,578.31378 0,10"
id="path4531-6-3"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -0,0 +1,207 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="215.06604"
height="134.61028"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="cube_neighbors.svg"
inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/cubepositionimgs/cube_horizontal_offset.png"
inkscape:export-xdpi="90.015251"
inkscape:export-ydpi="90.015251">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Mend"
style="overflow:visible;">
<path
id="path3809"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
transform="scale(0.4) rotate(180) translate(10,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="4.0000001"
inkscape:cx="40.272617"
inkscape:cy="42.648017"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showguides="true"
inkscape:snap-global="true"
inkscape:window-width="1920"
inkscape:window-height="1003"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
showborder="false"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3755"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(182.57291,-428.70349)">
<path
style="fill:none;stroke:#ff0000;stroke-width:0.50000000000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 3,54.610275 0,-40"
id="path4245"
inkscape:connector-curvature="0"
transform="translate(-182.57291,428.70349)" />
<path
style="fill:none;stroke:#ff0000;stroke-width:0.50000000000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 56,27.610275 54,0"
id="path4449"
inkscape:connector-curvature="0"
transform="translate(-182.57291,428.70349)" />
<g
id="g3792"
transform="translate(19.466963,-155.49999)">
<rect
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
y="771.25336"
x="608.28253"
height="59.181324"
width="59.181324"
id="rect3021"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="rect3021-2"
d="m -146.03985,717.34675 -53.03301,-26.2665"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041"
d="m -199.03985,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0"
d="m -146.03985,664.81375 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
style="fill:none;stroke:#ff0000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m -126.57291,484.31376 0,-41"
id="path4245-1"
inkscape:connector-curvature="0" />
<g
id="g3792-6"
transform="translate(72.46694,-129.49998)"
style="fill:none">
<rect
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
y="771.25336"
x="608.28253"
height="59.181324"
width="59.181324"
id="rect3021-0"
style="fill:none;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-5"
d="m -93.006853,691.08025 -53.032997,26.2665 -53.03301,-26.2665"
style="fill:none;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-02"
d="m -199.03985,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4-9"
d="m -93.039853,638.81375 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0-4"
d="m -146.03985,664.81375 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<rect
style="fill:none;stroke:#00ff00;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3793"
width="106.06067"
height="105.15029"
x="-126.60065"
y="482.87625" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="m -179.57291,443.31377 52,0"
id="path3795"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-167.57291"
y="438.31375"
id="text4241"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4243"
x="-167.57291"
y="438.31375">12</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="m -72.57291,456.31377 0,25"
id="path4265"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-67.572906"
y="473.31375"
id="text4451"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4453"
x="-67.572906"
y="473.31375">6</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,183 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="198.70314"
height="159.68738"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="cube_stacking.svg"
inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/cubepositionimgs/cube_stacking.png"
inkscape:export-xdpi="144.41595"
inkscape:export-ydpi="144.41595">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="48.782895"
inkscape:cy="101.25197"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showguides="true"
inkscape:snap-global="true"
inkscape:window-width="1920"
inkscape:window-height="1003"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
showborder="false"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3755"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.675018,-237.79787)">
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="179.47775"
y="272.98526"
id="text4396-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4398-45"
x="179.47775"
y="272.98526">12</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 192.0422,258.29789 0,-19.99994"
id="path4400-5"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 187.0422,238.2979 10,0"
id="path4402-7"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 192.0422,290.98525 0,-16.68735"
id="path4406-4"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 187.0422,290.98523 10,0"
id="path4408-91"
inkscape:connector-curvature="0" />
<g
id="g3832"
transform="translate(-165,167)">
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2"
d="m 417.85207,40.096489 0,59.181324 -59.18132,0"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)" />
<path
inkscape:connector-curvature="0"
id="path3041"
d="m 232.47775,150.98525 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4"
d="m 338.47775,150.98525 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0"
d="m 285.47775,176.98525 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g4838"
transform="translate(-297.99998,125.53302)">
<path
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 1;stroke-dashoffset:0;marker-start:none"
d="m 471.51075,192.25175 -53.033,-26.2665 -53.03301,26.2665"
id="rect3021-2-1-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<g
id="g3832-0"
transform="translate(133,-11.000002)">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect3021-8"
width="59.181324"
height="59.181324"
x="299.48941"
y="-19.084835"
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)" />
<path
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
d="m 417.85207,40.096489 0,59.181324 -59.18132,0"
id="rect3021-2-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 232.47775,150.98525 0,52"
id="path3041-02"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 338.47775,150.98525 0,52"
id="path3041-4-2"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 285.47775,176.98525 0,53"
id="path3041-0-9"
inkscape:connector-curvature="0" />
</g>
</g>
<rect
style="fill:none;stroke:#00ff02;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect4847"
width="106"
height="105.71874"
x="67.477753"
y="290.98526" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -0,0 +1,490 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="436.54492"
height="484.69528"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="cube_stack128.svg"
inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/cuberenderimgs/cube_stack128.png"
inkscape:export-xdpi="90.016075"
inkscape:export-ydpi="90.016075">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4142136"
inkscape:cx="194.46598"
inkscape:cy="191.56651"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showguides="true"
inkscape:snap-global="true"
inkscape:window-width="1920"
inkscape:window-height="1003"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
showborder="false"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3755"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(144.30527,-229.28993)">
<path
sodipodi:type="arc"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path8485"
sodipodi:cx="185"
sodipodi:cy="305.95663"
sodipodi:rx="5"
sodipodi:ry="5"
d="m 190,305.95663 c 0,2.76143 -2.23858,5 -5,5 -2.76142,0 -5,-2.23857 -5,-5 0,-2.76142 2.23858,-5 5,-5 2.76142,0 5,2.23858 5,5 z"
transform="matrix(0.5,0,0,0.5,-5.055293,308.5069)" />
<path
sodipodi:type="arc"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path8485-1"
sodipodi:cx="185"
sodipodi:cy="305.95663"
sodipodi:rx="5"
sodipodi:ry="5"
d="m 190,305.95663 c 0,2.76143 -2.23858,5 -5,5 -2.76142,0 -5,-2.23857 -5,-5 0,-2.76142 2.23858,-5 5,-5 2.76142,0 5,2.23858 5,5 z"
transform="matrix(0.5,0,0,0.5,-5.055293,323.5069)" />
<path
sodipodi:type="arc"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path8485-1-5"
sodipodi:cx="185"
sodipodi:cy="305.95663"
sodipodi:rx="5"
sodipodi:ry="5"
d="m 190,305.95663 c 0,2.76143 -2.23858,5 -5,5 -2.76142,0 -5,-2.23857 -5,-5 0,-2.76142 2.23858,-5 5,-5 2.76142,0 5,2.23858 5,5 z"
transform="matrix(0.5,0,0,0.5,-5.055293,338.5069)" />
<g
id="g3832"
transform="translate(-198.53304,165.96697)">
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2"
d="m 417.85207,40.096489 0,59.181324 -59.18132,0"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)" />
<path
inkscape:connector-curvature="0"
id="path3041"
d="m 232.47775,150.98525 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4"
d="m 338.47775,150.98525 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0"
d="m 285.47775,176.98525 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g4838"
transform="translate(-331.53302,124.49999)">
<g
id="g3832-0"
transform="translate(133,-11.000002)">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect3021-8"
width="59.181324"
height="59.181324"
x="299.48941"
y="-19.084835"
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)" />
<path
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
d="m 417.85207,40.096489 0,59.181324 -59.18132,0"
id="rect3021-2-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 232.47775,150.98525 0,52"
id="path3041-02"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 338.47775,150.98525 0,52"
id="path3041-4-2"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 285.47775,176.98525 0,53"
id="path3041-0-9"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g3832-5"
transform="translate(-198.53304,215.96697)">
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-7"
d="m 417.85207,40.096489 0,59.181324 -59.18132,0"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)" />
<path
inkscape:connector-curvature="0"
id="path3041-41"
d="m 232.47775,150.98525 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4-8"
d="m 338.47775,150.98525 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0-5"
d="m 285.47775,176.98525 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g3832-9"
transform="translate(-198.53306,433.49997)">
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-75"
d="m 417.85207,40.096489 0,59.181324 -59.18132,0"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)" />
<path
inkscape:connector-curvature="0"
id="path3041-3"
d="m 232.47775,150.98525 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4-88"
d="m 338.47775,150.98525 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0-3"
d="m 285.47775,176.98525 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g4838-1"
transform="translate(-331.53303,392.03299)">
<g
id="g3832-0-9"
transform="translate(133,-11.000002)">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect3021-8-6"
width="59.181324"
height="59.181324"
x="299.48941"
y="-19.084835"
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)" />
<path
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
d="m 417.85207,40.096489 0,59.181324 -59.18132,0"
id="rect3021-2-1-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 232.47775,150.98525 0,52"
id="path3041-02-3"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 338.47775,150.98525 0,52"
id="path3041-4-2-3"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 285.47775,176.98525 0,53"
id="path3041-0-9-3"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g3832-5-8"
transform="translate(-198.53306,483.49997)">
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="rect3021-2-7-6"
d="m 417.85207,40.096489 0,59.181324 -59.18132,0"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.12123179;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
transform="matrix(0.89611053,0.44383096,-0.89611053,0.44383096,0,0)" />
<path
inkscape:connector-curvature="0"
id="path3041-41-0"
d="m 232.47775,150.98525 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-4-8-4"
d="m 338.47775,150.98525 0,52"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3041-0-5-8"
d="m 285.47775,176.98525 0,53"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 2;stroke-dashoffset:0"
d="m 33.944724,419.01824 0,113"
id="path3362"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 2;stroke-dashoffset:0"
d="m 139.94472,419.01824 0,113"
id="path3362-1"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-57.055267"
y="244.48524"
id="text3228"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3230"
x="-57.055267"
y="244.48524">Y Offset</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -58.80527,249.23523 80,0"
id="path3232"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-27.411713"
y="294.48523"
id="text3234"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3236"
x="-27.411713"
y="294.48523">0</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-33.881439"
y="339.48523"
id="text3238"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3240"
x="-33.881439"
y="339.48523">12</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-33.954681"
y="404.48523"
id="text3242"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3244"
x="-33.954681"
y="404.48523">24</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-142.30527"
y="244.48524"
id="text3246"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3248"
x="-142.30527"
y="244.48524">Block #</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -143.80527,249.23523 80,0"
id="path3232-6"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-99.0914"
y="294.48523"
id="text3234-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3236-0"
x="-99.0914"
y="294.48523">0</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-99.272057"
y="339.48523"
id="text3289"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3291"
x="-99.272057"
y="339.48523">1</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-98.827728"
y="399.48523"
id="text3293"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3295"
x="-98.827728"
y="399.48523">2</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-112.0748"
y="664.48523"
id="text3297"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3299"
x="-112.0748"
y="664.48523">127</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-112.29941"
y="618.48523"
id="text3301"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3303"
x="-112.29941"
y="618.48523">126</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-112.05527"
y="564.48523"
id="text3305"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3307"
x="-112.05527"
y="564.48523">125</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-46.952728"
y="564.48523"
id="text3309"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3311"
x="-46.952728"
y="564.48523">1500</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-46.615807"
y="618.48523"
id="text3313"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3315"
x="-46.615807"
y="618.48523">1512</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-47.055267"
y="664.48523"
id="text3317"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3319"
x="-47.055267"
y="664.48523">1524</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="152.142"
y="483.9852"
id="text3321"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3323"
x="152.142"
y="483.9852">12*128=1536</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 172.142,454.98522 0,-191.00001"
id="path3325"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 172.142,494.9852 0,192"
id="path3327"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 162.142,263.98521 20,0"
id="path3329"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 162.142,686.98521 20,0"
id="path3331"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

364
docs/design/designdoc.rst Normal file
View File

@@ -0,0 +1,364 @@
====================
Design Documentation
====================
So you'd like a technical overview of how The Overviewer works, huh? You've come
to the right place!
This document's scope does not cover the details of the code. The code is fairly
well commented and not difficult to understand. Instead, this document is
intended to give an explanation to how the Overviewer was designed, why certain
decisions were made, and how all the pieces fit together. Think of this document
as commenting on how all the high level pieces of the code work.
This document is probably a good read to anyone that wants to get involved in
Overviewer development.
So let's get started!
.. note::
This page is still under construction
.. contents::
Background Info
===============
The Overviewer's task is to take Minecraft worlds and render them into a set of tiles that can be displayed with a Google Maps interface.
A Minecraft world extends indefinitely along the two horizontal axes, and are
exactly 128 units high. Minecraft worlds are made of cubes, where each slot in
the world's grid has a type that determines what it is (grass, stone, ...).
This makes worlds relatively uncomplicated to render, the Overviewer simply
determines what cubes to draw and where. Since everything in Minecraft is
aligned to a strict grid, placement and rendering decisions are completely
deterministic and can be performed in an iterative fashon.
The coordinate system for Minecraft has three axes. The X and Z axes are the
horizontal axes. They extend indefinitely towards both positive and negative
infinity. (There are practical limits, but no theoretical limits). The Y axis
extends from 0 to 127, which corresponds with the world height limit. Each
block in Minecraft has a coordinate address, e.g. the block at 15,78,-35 refers
to 15 along the X axis, -35 along the Z axis, and 78 units up from bedrock.
The world is divided up into *chunks*. A chunk is a 16 by 16 area of the world
that extends from bedrock to sky. In other words, a 16,128,16 "chunk" of the
world. Chunks also have an address, but in only 2 dimensions. To find the which
chunk a block is in, simply divide its X and Z coordinates by 16 and take the
floor.
Minecraft worlds are generated on-the-fly by the chunk. This means not all
chunks will exist. There is no pattern to chunk generation, the game simply
generates them as needed.
Chunks are stored on-disk in region files. A Minecraft region is a "region" of
32 by 32 chunks. Regions have their own address, and for a particular chunk one
can find its region by dividing its coordinates by 32 and taking the floor. A
region may contain all 1024 of its chunks, or only a subset of them, since not
all chunks may exist. The absence of a region file indicates none of its chunks
exist.
About the Rendering
===================
Minecraft worlds are rendered in an approximated Isometric projection at an
oblique angle. In the original design, the projection acts as if your eye is
infinitely far away looking down at the world at a 45 degree angle in the
South-East direction (now, the world can be rendered at any of the 4 oblique
directions).
.. image:: screenshot.png
:alt: A screenshot of Overviewer output
In order to render a Minecraft world, there are a few steps that need to happen.
These steps are explained in detail in the next few sections.
1. Render each block
2. Render the chunks from the blocks
3. Render the tiles of the map from the chunks
4. Shrink and combine the tiles for the other zoom levels
Block Rendering
===============
.. This section shows how each block is pre-rendered
The first step is rendering the blocks from the textures. Each block is "built"
from its textures into an image of a cube and cached in global variables of the
:mod:`textures` module.
Textures come in the size 16 by 16 (higher resolution textures are resized and
the process remains the same). In order to render a cube out of this, an `affine
transformation`_ is applied to the texture in order to transform it to the top,
left, and right faces of the cube.
.. image:: texturecubing.png
:alt: A texture gets rendered into a cube
.. _affine transformation: http://en.wikipedia.org/wiki/Affine_transformation
The result is an image of a cube that is 24 by 24 pixels in size. This
particular size for the cubes was chosen for an important reason: 24 is
divisible by 2 and by 4. This makes placement much easier. E.g. in order to draw
two cubes that are next to each other in the world, one is drawn exactly 12
pixels over and 6 pixels down from the other. All placements of the cubes happen
on exact pixel boundaries and no further resolution is lost beyond the initial
transformations.
The transformation happens in two stages. First, the texture is transformed for
the top of the cube. Then the texture is transformed for the left side of the
cube, which is mirrored for the right side of the cube.
Top Transformation
------------------
The transformation for the top face of the cube is a simple `affine
transformation`_ from the original square texture. It is actually several affine
transformations: a re-size, a rotation, and a scaling; but since multiple affine
transformations can be chained together simply by multiplying the transformation
matrices together, only one transformation is actually done.
This can be seen in the function :func:`textures.transform_image`. It takes
these steps:
1. The texture is re-sized to 17 by 17 pixels. This is done because the diagonal
of a square with sides 17 is approximately 24, which is the target size for
the bounding box of the cube image. So when it's rotated, it will be the
correct width.
2. The image is rotated 45 degrees about its center.
3. The image is scaled on the vertical axis by a factor of 1/2.
This produces an image of size 24 by 12 as seen in the following sequence.
.. image:: texturetopsteps.png
:alt: The 4 steps for transforming a texture square into the top of the cube.
The final image, shown below, becomes the top of the cube.
.. image:: cube_top.png
:alt: Top of the cube
On the left is what will become the top of the block at actual size after the
transformation, the right is the same but blown up by a factor of 10 with no
interpolation to show the pixels.
Side Transformation
-------------------
The texture square is transformed for the sides of the cube in the
:func:`textures.transform_image_side` function. This is another `affine
transformation`_, but this time only two transformations are done: a re-size and
a shear.
1. First the texture is re-sized to 12 by 12 pixels. This is half the width of
24 so it will have the correct width after the shear.
2. The 12 by 12 square is sheared by a factor of 1.5 in the Y direction,
producing an image that is bounded by a 12 by 18 pixel square.
.. image:: texturesidesteps.png
:alt: Texture being sheared for the side of the cube.
This image is simply flipped along the horizontal axis for the other visible
side of the cube.
.. image:: cube_sides.png
:alt: The sides of the block
Again, shown on the left are the two sides of the block at actual size, the
right is scaled with no interpolation by a factor of 10 to show the pixels.
An Entire Cube
--------------
These three images, the top and two sides, are pasted into a single 24 by 24
pixel image to get the cube, as shown.
However, notice from the middle of the three images in the sequence below that
the images as transformed don't fit together exactly. There is some overlap when
put in the 24 by 24 box in which they must fit.
.. image:: cube_parts.png
:alt: How the cube parts fit together
There is one more complication. The cubes don't tessellate perfectly. This
diagram illustrates when a cube is positioned next to another. The lower cubes
are 18 pixels lower and 12 pixels to either side, which is half the width and
3/4 the height respectively.
.. image:: tessellation.png
:alt: Cubes don't tessellate perfectly
The solution is to manually touch up those 6 pixels. 3 pixels are added on the
upper left of each cube, 3 on the lower right. Therefore, they all line up
perfectly!
This is done at the end of :func:`textures._build_block`
.. image:: pixelfix.png
:alt: The 6 pixels manually added to each cube.
Other Cube Types
----------------
Many block types are not rendered as cubes. Fences, rails, doors, torches, and
many other types of blocks have custom rendering routines.
Chunk Rendering
===============
So now that each type of cube is rendered and cached in global variables within
the :mod:`textures` module, the next step is to use the data from a chunk of
the world to arrange these cubes on an image, rendering an entire chunk.
How big is a chunk going to be? A chunk is 16 by 16 blocks across, 128 blocks
high. The diagonal of a 16 by 16 grid is 16 squares. Observe.
This is the top-down view of a single chunk. It is essentially a 16 by 16 grid,
extending 128 units into the page.
.. image:: cuberenderimgs/chunk_topdown.png
:alt: A 16x16 square grid
Rendered at the appropriate perspective, we'll have something like this
(continued down for 128 layers).
.. image:: cuberenderimgs/chunk_perspective.png
:alt: Perspective rendering of the two top layers of a chunk.
Each of those cubes shown is where one of the pre-rendered cubes gets pasted.
This happens from back to front, bottom to top, so that the chunk gets drawn
correctly. Obviously if a cube in the back is pasted on the image after the
cubes in the front, it will be drawn on top of everything.
Cube Positioning
----------------
A single cube is drawn in a 24 by 24 square. Before we can construct a chunk out
of individual cubes, we must figure out how to position neighboring cubes.
First, to review, these are the measurements of a cube:
.. image:: cubepositionimgs/cube_measurements.png
:alt: The measurements of a cube
* The cube is bounded by a 24 by 24 pixel square.
* The side vertical edges are 12 pixels high.
* The top (and bottom) face of the cube takes 12 vertical pixels (and 24
horizontal pixels).
* The edges of the top and bottom of the cube take up 6 vertical pixels and 12
horizontal pixels each.
Two cubes that are neighbors after projection to the image (diagonally
neighboring in the world) have a horizontal offset of 24 pixels from each other,
as shown below on the left. This is mostly trivial, since the images don't end
up overlapping at all. Two cubes in the same configuration but rotated 90
degrees have some overlap in the image, and are only vertically offset by 12
pixels, as shown on the right.
.. image:: cubepositionimgs/cube_horizontal_offset.png
:alt: Two cubes horizontally positioned are offset by 24 pixels on the X axis.
Now for something slightly less trivial: two cubes that are stacked on top of
each other in the world. One is rendered lower on the vertical axis of the
image, but by how much?
.. image:: cubepositionimgs/cube_stacking.png
:alt: Two cubes stacked are offset in the image by 12 pixels.
Interestingly enough, due to the projection, this is exactly the same offset as
the situation above for diagonally neighboring cubes. The cube outlined in green
is drawn 12 pixels below the other one. Only the order that the cubes are drawn
is different.
And finally, what about cubes that are next to each other in the world ---
diagonally next to each other in the image?
.. image:: cubepositionimgs/cube_neighbors.png
:alt: Cubes that are neighbors are offset by 12 on the X and 6 on the Y
The cube outlined in green is offset on the horizontal axis by half the cube
width, or 12 pixels. It is offset on the vertical axis by half the width of the
cube's top, or 6 pixels. For the other 3 directions this could go, the
directions of the offsets are changed, but the amounts are the same.
The size of a chunk
-------------------
Now that we know how to place cubes relative to each other, we can begin to
construct a chunk.
Since the cube images are 24 by 24 pixels, and the diagonal of the 16 by 16 grid
is 16 squares, the width of one rendered chunk will be 384 pixels. Just
considering the top layer of the chunk:
.. image:: cuberenderimgs/chunk_width.png
:alt: Illustrating the width of a single chunk
Since cubes next to each other in the same "diagonal row" are offset by 24
pixels, this is trivially calculated.
The height is a bit more tricky to calculate. Let's start by calculating the
height of a single stack of 128 cubes.
If the top of a stack of cubes is at Y value 0, the 128th cube down must be
drawn (128-1)*12=1524 pixels below. However, that's not the end of the story.
The bottom cube has a height of 24 pixels, so the height of a rendered stack of
128 cube is 1548 pixels.
.. image:: cuberenderimgs/cube_stack128.png
:alt: A stack of 128 cubes takes 1560 vertical pixels to draw.
You can also calculate this by looking at the sides of the cubes, which don't
overlap at all. They are 12 pixels each, times 128 cubes in the stack, gives
1536 pixels. Add in the 6 pixels for the top cube and the 6 pixels for the
bottom cube to get the total height of 1548 pixels.
So what about the entire chunk? Let's take a look at the top and bottom few
layers of a chunk.
.. image:: cuberenderimgs/chunk_height.png
:alt: The highest and lowest positioned cubes in a chunk
Let's let the red cubes represent the stack from above. The one on the top we'll
define as position 0, with our vertical axis running positively downward (as is
the case in a lot of imaging library coordinate systems) Therefore, the bottom
red cube is at vertical offset 1524 below.
The green cube at the bottom most tip is the cube with the lowest vertical
placement on the image, so its offset plus 24 pixels for its height will be the
chunk height. Since the green cubes each have an offset of 12 pixels, add 15*12
pixels to get the offset of the lowest green cube: 1704.
So the total size of a chunk in pixels is 384 wide by 1728 tall. That's pretty
tall!
Tile Rendering
==============
.. Covers the placement of chunk images on a tile
Reading the Data Files
======================
..
Covers how to extract the blocks of each chunk from the region files. Also
covers the nbt file stuff.
Image Composition
=================
..
Covers the issues I had with PIL's image composition and why we needed
something fancier.
Multiprocessing
===============
..
Covers how the Overviewer utilizes multiple processors to render faster
Caching
=======
.. How the overviewer determines what needs to be rendered and what doesn't
Lighting
========
Cave Mode
=========

BIN
docs/design/pixelfix.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

205
docs/design/pixelfix.svg Normal file
View File

@@ -0,0 +1,205 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="240"
height="253"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="pixelfix.svg"
inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/pixelfix.png"
inkscape:export-xdpi="61.016949"
inkscape:export-ydpi="61.016949">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path4162"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-5"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4162-9"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-4"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4162-94"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="23.820257"
inkscape:cy="139.37195"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:window-width="1920"
inkscape:window-height="1003"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid3360"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-1595,-435.86218)">
<image
y="442.39774"
x="1595"
id="image3090"
xlink:href="data:image/png;base64,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
zuh1+eUAAAAASUVORK5CYII=
"
height="240"
width="240" />
<path
style="fill:none;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 1040,245 20,0 0,20 -20,0 0,-20"
id="path4560"
inkscape:connector-curvature="0"
transform="translate(680,422.36218)" />
<path
style="fill:none;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 1760,647.36218 20,0 0,20 -20,0 0,-20"
id="path4560-0"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 1800,627.36218 20,0 0,20 -20,0 0,-20"
id="path4560-0-9"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 1700,437.36218 20,0 0,20 -20,0 0,-20"
id="path4560-0-5"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 1620,477.36218 20,0 0,20 -20,0 0,-20"
id="path4560-0-6"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 1660,457.36218 20,0 0,20 -20,0 0,-20"
id="path4560-0-61"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
docs/design/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -0,0 +1,407 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1180"
height="430"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="tessellation.svg"
inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/tessellation.png"
inkscape:export-xdpi="61.016949"
inkscape:export-ydpi="61.016949">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path4162"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-5"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4162-9"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-4"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4162-94"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lend-5-3"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
id="path4162-9-2"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lend-3"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
inkscape:connector-curvature="0"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
id="path4162-0" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lend-5-4"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
id="path4162-9-4"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lend-39"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
inkscape:connector-curvature="0"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
id="path4162-2" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.9899495"
inkscape:cx="515.07845"
inkscape:cy="224.85855"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:window-width="1920"
inkscape:window-height="1003"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid3360"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-680,-422.36218)">
<g
id="g5062">
<image
y="612.36218"
x="925"
id="image5005-4"
xlink:href="data:image/png;base64,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 "
height="240"
width="240" />
<path
inkscape:connector-curvature="0"
id="path3876"
d="m 925,792.36218 0,-120 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0"
style="fill:none;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 1190,652.36218 150,0"
id="path3386"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1500,602.36218 10,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0"
id="path3092-1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#00ff00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1500,602.36218 10,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 10,0 0,120"
id="path3874-1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1620,782.36218 0,-120 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0"
id="path3876-0"
inkscape:connector-curvature="0" />
<g
transform="translate(695,-5)"
id="g5026-8">
<image
width="240"
height="240"
xlink:href="data:image/png;base64,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 "
id="image5005-0-8"
x="805"
y="427.36218" />
<g
id="g4907-9">
<g
transform="translate(-85,24.999994)"
id="layer1-3-8"
inkscape:label="Layer 1">
<g
id="g3080-9-1-8"
transform="translate(830,-4.9999974)" />
<g
id="g3996-1-5-8-1"
transform="translate(825,-19.999997)" />
<g
id="g3928-7-2-6"
transform="translate(830,-19.999997)" />
</g>
<path
style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 805,607.36218 10,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0"
id="path3092-8"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="translate(700,-10)"
id="g5035-4">
<image
width="240"
height="240"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAABHNCSVQICAgIfAhkiAAACxJJREFU eJzt3dtr5HcdxvGZzEwyycxkctwke3R3uz0pFUsr9MItVluwFwrqlVBPIBVEhBa8UhD0QoquCCKK IFrvBUVa8VS3N9IDi8W6LW03XXfr7mZznCSTTDKTxH/Aizcau33W9+v6w8z8Zn7P/G4ePt/i3t5e QTevR87cj37gXzx2tvi//izaf303+gNI+s8ZYCmYAZaCGWApmAGWghlgKZgBloIZYCmYAZaCFW1i vbN88hv37esPUu5n/9GH3z2xn29b+M7HfmWz623gE1gKZoClYAZYCmaApWAGWApmgKVgBlgKZoCl YAZYCmYT67/0qSc+gL7AvV32PVcGymhua6OL5robPTRXbVTQXLFvfwtWlUF2vT/78jM2u/4Nn8BS MAMsBTPAUjADLAUzwFIwAywFM8BSMAMsBTPAUrD/uybW53/4ALrgcn8Jvd72Jms61UcH0FwJvu/G cgfNDdRYw2qnu4vmVq5toLnG5CCa21jZYq83XkVzW7B59tMv/emmaHb5BJaCGWApmAGWghlgKZgB loIZYCmYAZaCGWApmAGWgr3jm1iPfPd+9AG7WzvwFdn19g+xXU3FIiv00IZQrdmP5lauttHcQJ29 Xq3JmmI92NiCX0uhWGKDdFfYyrV19r7wA1YGWDPuycfO3pBml09gKZgBloIZYCmYAZaCGWApmAGW ghlgKZgBloIZYCnYvjexPvcDtnNqu81O1xscYU2izVX2evSUQFqrqdbZzimqXGWNo7UFtpuq2mDf H20cta5vorkG3AFG0QbY5hq7D4rw0bUNG3RD8D6dPDaM5s584jfoFvQJLAUzwFIwAywFM8BSMAMs BTPAUjADLAUzwFIwAywFKz7+1EdQNWlplp2G191mzZXpEyNojlq4vIbmqjXWmKF6XbaLqwMbQntw Zxc1BHddlcr7+1/eXmanDlaq7H3pqYjUgeNNNEevg6LNx6k7amjOJ7AUzABLwQywFMwAS8EMsBTM AEvBDLAUzABLwQywFKzct8SaIQdO1dHcdos1tt48N4/m6K6mkUPs863OsUbP4DDbdUVPRewrsy1b 3Q7b/dScHkJzuz32+3bWttHc0AjddcXet9th39/oNPt9B+psp1ivwxqD1MRh1vDrb1bR3O48a+75 BJaCGWApmAGWghlgKZgBloIZYCmYAZaCGWApmAGWgpU3fssaKaOnWSNq+O5xNLe7xRpH7TXWnGpd W0dzFXj6X2WAzdGdUzs9dr27cG59gZ0SODTKmj+9bfa+Lbibil7v9G2jaK4IV4Vdn11Bc4N11gAb m2SNt4kT7L7fPMd2ty0/y3LpE1gKZoClYAZYCmaApWAGWApmgKVgBlgKZoClYAZYClYe67JdSIt/ Zo2ezvOvoLnq0Qaa211mjZTGafb5xqrsVLrLLy+juVKF/Qc2p1ijZ3OVnYZXbbAGGG120dMJO216 yiJDm11TJ9hOrNoptnusB5tO3VH2e1w4C+/7jSNobnyH5dInsBTMAEvBDLAUzABLwQywFMwAS8EM sBTMAEvBDLAUrNzfz5or03usMXOqcQLN/bF6Hc31zrPTDguH2X/RxhF2HcduZ7uaFtussbU6x3ZY DU8OorlrF9jupx14OmFvkzWTjtw1wV6v3EZz4zXWsFqHu9F6l1mDid5X2x9ipw4+CO/71zstNFcs sVz6BJaCGWApmAGWghlgKZgBloIZYCmYAZaCGWApmAGWgpVPHmSnqj370iyaqwywUwzHLrFdQ80J 1vx54+wSmmvfi8YKdzx8Es2NtobR3OzAZTS3fH0OzR1/H9uttLrAGkfrW/NobrfGGmW3NI+huXqz huZefOqvaG7vBXa9t8H7qvUcO03w4gg7HfPKArtPT7+XNbt8AkvBDLAUzABLwQywFMwAS8EMsBTM AEvBDLAUzABLwcoLq3BH1BTbEXX7IdZwOV+bRnPLl19Fc4U2O4Wv9TTbYfVS6Tyaq2+yHVZrhVU0 V72XnWLY2mKNngI7BLJQHYPX8QK7jrkC23l2YZA1u+jv1hhkpzYul1hzavTIHWju9hG2U6zQY3M0 lz6BpWAGWApmgKVgBlgKZoClYAZYCmaApWAGWApmgKVg5dogO33t6gJr4Pz94lU0N3pgBs0VG6yZ NFxju5X6y+w/6+Wnr6C55SbbTTXRYafNzb/KGlb198CKFbT+Mtv9NLnMGluXq+xUxEqL7eK659bD aG67xxp55T72+Zr9rDlF7/v2Jjs98cA4+319AkvBDLAUzABLwQywFMwAS8EMsBTMAEvBDLAUzABL wYrfe/QhVElZbLEdPc2hKppba7fRXHeP/cdMjdTRXJEVogq9XdjoKbJGT6vD5laXWCNqbZs1eqhG P2vkDY+xhlCzyr7o3h6bK/ex+2CPfc2FuRW2E6tSZPdBAzYBWxvs9MTxJmsg+gSWghlgKZgBloIZ YCmYAZaCGWApmAGWghlgKZgBloKVL15lO5iq/RU0NzrMdib19bEGzlvzK2juuVcuobkTM2NobqC/ jObuPD6F5hbfYDuT6iOsyTa0w07ho/pKsDnVZQ2wQ8fYzrPzb86hua1ttptqFt7P02OsuTcxOYLm mnX2uy2ssgYizaVPYCmYAZaCGWApmAGWghlgKZgBloIZYCmYAZaCGWApWPHMFx5EW4RabbbLZ2eX LSW6+9ZDaK4NdwjNrbCGy1XY7JoYG0Zzq+v0e2G7lZp1tgvp4DhrElFXFtmOqNY6241WgjushmmD aYmdjjkDm1NTI2yHVQ3ueDv32j/RXAk2EJs19r4+gaVgBlgKZoClYAZYCmaApWAGWApmgKVgBlgK ZoClYOVdeJzb+ibbhXSgyRouf5u9huZOHZ5Ac8US29lVPnASzc00WMNqu7uD5upVdvrf1Xm2C2mo yq6XWl5pobmZSbZTbL3D7peZUXba4Up5Es0V+1hjq1RmO8/ofdqAv+/1FmsMNobYzjOfwFIwAywF M8BSMAMsBTPAUjADLAUzwFIwAywFM8BSsPLjP/k9WtLz7c8+gCpbxw+Nozf+w4uvo7k1uIPp6Axr bHXnL6O5oYlpNEd3gJ2cYTu2apOH0dzF186jOeqWO+9Cc9Nl1nQ6d2EezQ0NlNBc9yL73SpTTTR3 7lV2muXqZhfNffieU2iONh9pLn0CS8EMsBTMAEvBDLAUzABLwQywFMwAS8EMsBTMAEvBinuwGbLf nvjMafTGC5UZ9HqDG1fQ3GKLNbvGm+yUwN4O+/7W2pto7ui7jqG5LbiLixqosEbUpYv/QHON2iCa K5fYaX37/bttDh1EcxPdq2juqz9/ll3IPvMJLAUzwFIwAywFM8BSMAMsBTPAUjADLAUzwFIwAywF u2FNrP32rS9+HF1Is8B2Oq13WNPprXn2eo3BKpq78yg7/e8vbyyiOeq+W9gus/OX2OmJa5vsdMfD k2xXWL3KmmKtAnu9r/3olzekObXffAJLwQywFMwAS8EMsBTMAEvBDLAUzABLwQywFMwAS8FumibW fvvmpz+IvpilVhu93lC1H82dOMiaWGP1ATRHLa1vobnZK6yJtdHZRnNjzRqa+/qTz9wUzan95hNY CmaApWAGWApmgKVgBlgKZoClYAZYCmaApWAGWApmE+ttcubRh9AX3dnqodcbG2an8FFLq+z0v+pA Gc099uPf2Zx6G/gEloIZYCmYAZaCGWApmAGWghlgKZgBloIZYCmYAZaC2cQK9ZWPvn9ff7jv//p5 m1OBfAJLwQywFMwAS8EMsBTMAEvBDLAUzABLwQywFMwAS8H+BWJYktycMne3AAAAAElFTkSuQmCC "
id="image5005-40"
x="680"
y="612.36218" />
<g
id="g4897-5">
<path
style="fill:none;stroke:#ff7d00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 800,612.36218 10,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 10,0 0,120"
id="path3874-6"
inkscape:connector-curvature="0" />
<g
transform="translate(-210,209.99999)"
id="layer1-3-1-0"
inkscape:label="Layer 1">
<g
id="g3080-9-1-2-0"
transform="translate(830,-4.9999974)" />
<g
id="g3996-1-5-8-3-4"
transform="translate(825,-19.999997)" />
<g
id="g3928-7-2-1-0"
transform="translate(830,-19.999997)" />
</g>
</g>
</g>
<g
transform="translate(695,-10)"
id="g5062-7">
<image
y="612.36218"
x="925"
id="image5005-4-4"
xlink:href="data:image/png;base64,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 "
height="240"
width="240" />
<path
inkscape:connector-curvature="0"
id="path3876-9"
d="m 925,792.36218 0,-120 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0"
style="fill:none;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g5026">
<image
width="240"
height="240"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAABHNCSVQICAgIfAhkiAAACxJJREFU eJzt3dtr5HcdxvGZzEwyycxkctwke3R3uz0pFUsr9MItVluwFwrqlVBPIBVEhBa8UhD0QoquCCKK IFrvBUVa8VS3N9IDi8W6LW03XXfr7mZznCSTTDKTxH/Aizcau33W9+v6w8z8Zn7P/G4ePt/i3t5e QTevR87cj37gXzx2tvi//izaf303+gNI+s8ZYCmYAZaCGWApmAGWghlgKZgBloIZYCmYAZaCFW1i vbN88hv37esPUu5n/9GH3z2xn29b+M7HfmWz623gE1gKZoClYAZYCmaApWAGWApmgKVgBlgKZoCl YAZYCmYT67/0qSc+gL7AvV32PVcGymhua6OL5robPTRXbVTQXLFvfwtWlUF2vT/78jM2u/4Nn8BS MAMsBTPAUjADLAUzwFIwAywFM8BSMAMsBTPAUrD/uybW53/4ALrgcn8Jvd72Jms61UcH0FwJvu/G cgfNDdRYw2qnu4vmVq5toLnG5CCa21jZYq83XkVzW7B59tMv/emmaHb5BJaCGWApmAGWghlgKZgB loIZYCmYAZaCGWApmAGWgr3jm1iPfPd+9AG7WzvwFdn19g+xXU3FIiv00IZQrdmP5lauttHcQJ29 Xq3JmmI92NiCX0uhWGKDdFfYyrV19r7wA1YGWDPuycfO3pBml09gKZgBloIZYCmYAZaCGWApmAGW ghlgKZgBloIZYCnYvjexPvcDtnNqu81O1xscYU2izVX2evSUQFqrqdbZzimqXGWNo7UFtpuq2mDf H20cta5vorkG3AFG0QbY5hq7D4rw0bUNG3RD8D6dPDaM5s584jfoFvQJLAUzwFIwAywFM8BSMAMs BTPAUjADLAUzwFIwAywFKz7+1EdQNWlplp2G191mzZXpEyNojlq4vIbmqjXWmKF6XbaLqwMbQntw Zxc1BHddlcr7+1/eXmanDlaq7H3pqYjUgeNNNEevg6LNx6k7amjOJ7AUzABLwQywFMwAS8EMsBTM AEvBDLAUzABLwQywFKzct8SaIQdO1dHcdos1tt48N4/m6K6mkUPs863OsUbP4DDbdUVPRewrsy1b 3Q7b/dScHkJzuz32+3bWttHc0AjddcXet9th39/oNPt9B+psp1ivwxqD1MRh1vDrb1bR3O48a+75 BJaCGWApmAGWghlgKZgBloIZYCmYAZaCGWApmAGWgpU3fssaKaOnWSNq+O5xNLe7xRpH7TXWnGpd W0dzFXj6X2WAzdGdUzs9dr27cG59gZ0SODTKmj+9bfa+Lbibil7v9G2jaK4IV4Vdn11Bc4N11gAb m2SNt4kT7L7fPMd2ty0/y3LpE1gKZoClYAZYCmaApWAGWApmgKVgBlgKZoClYAZYClYe67JdSIt/ Zo2ezvOvoLnq0Qaa211mjZTGafb5xqrsVLrLLy+juVKF/Qc2p1ijZ3OVnYZXbbAGGG120dMJO216 yiJDm11TJ9hOrNoptnusB5tO3VH2e1w4C+/7jSNobnyH5dInsBTMAEvBDLAUzABLwQywFMwAS8EM sBTMAEvBDLAUrNzfz5or03usMXOqcQLN/bF6Hc31zrPTDguH2X/RxhF2HcduZ7uaFtussbU6x3ZY DU8OorlrF9jupx14OmFvkzWTjtw1wV6v3EZz4zXWsFqHu9F6l1mDid5X2x9ipw4+CO/71zstNFcs sVz6BJaCGWApmAGWghlgKZgBloIZYCmYAZaCGWApmAGWgpVPHmSnqj370iyaqwywUwzHLrFdQ80J 1vx54+wSmmvfi8YKdzx8Es2NtobR3OzAZTS3fH0OzR1/H9uttLrAGkfrW/NobrfGGmW3NI+huXqz huZefOqvaG7vBXa9t8H7qvUcO03w4gg7HfPKArtPT7+XNbt8AkvBDLAUzABLwQywFMwAS8EMsBTM AEvBDLAUzABLwcoLq3BH1BTbEXX7IdZwOV+bRnPLl19Fc4U2O4Wv9TTbYfVS6Tyaq2+yHVZrhVU0 V72XnWLY2mKNngI7BLJQHYPX8QK7jrkC23l2YZA1u+jv1hhkpzYul1hzavTIHWju9hG2U6zQY3M0 lz6BpWAGWApmgKVgBlgKZoClYAZYCmaApWAGWApmgKVg5dogO33t6gJr4Pz94lU0N3pgBs0VG6yZ NFxju5X6y+w/6+Wnr6C55SbbTTXRYafNzb/KGlb198CKFbT+Mtv9NLnMGluXq+xUxEqL7eK659bD aG67xxp55T72+Zr9rDlF7/v2Jjs98cA4+319AkvBDLAUzABLwQywFMwAS8EMsBTMAEvBDLAUzABL wYrfe/QhVElZbLEdPc2hKppba7fRXHeP/cdMjdTRXJEVogq9XdjoKbJGT6vD5laXWCNqbZs1eqhG P2vkDY+xhlCzyr7o3h6bK/ex+2CPfc2FuRW2E6tSZPdBAzYBWxvs9MTxJmsg+gSWghlgKZgBloIZ YCmYAZaCGWApmAGWghlgKZgBloKVL15lO5iq/RU0NzrMdib19bEGzlvzK2juuVcuobkTM2NobqC/ jObuPD6F5hbfYDuT6iOsyTa0w07ho/pKsDnVZQ2wQ8fYzrPzb86hua1ttptqFt7P02OsuTcxOYLm mnX2uy2ssgYizaVPYCmYAZaCGWApmAGWghlgKZgBloIZYCmYAZaCGWApWPHMFx5EW4RabbbLZ2eX LSW6+9ZDaK4NdwjNrbCGy1XY7JoYG0Zzq+v0e2G7lZp1tgvp4DhrElFXFtmOqNY6241WgjushmmD aYmdjjkDm1NTI2yHVQ3ueDv32j/RXAk2EJs19r4+gaVgBlgKZoClYAZYCmaApWAGWApmgKVgBlgK ZoClYOVdeJzb+ibbhXSgyRouf5u9huZOHZ5Ac8US29lVPnASzc00WMNqu7uD5upVdvrf1Xm2C2mo yq6XWl5pobmZSbZTbL3D7peZUXba4Up5Es0V+1hjq1RmO8/ofdqAv+/1FmsMNobYzjOfwFIwAywF M8BSMAMsBTPAUjADLAUzwFIwAywFM8BSsPLjP/k9WtLz7c8+gCpbxw+Nozf+w4uvo7k1uIPp6Axr bHXnL6O5oYlpNEd3gJ2cYTu2apOH0dzF186jOeqWO+9Cc9Nl1nQ6d2EezQ0NlNBc9yL73SpTTTR3 7lV2muXqZhfNffieU2iONh9pLn0CS8EMsBTMAEvBDLAUzABLwQywFMwAS8EMsBTMAEvBinuwGbLf nvjMafTGC5UZ9HqDG1fQ3GKLNbvGm+yUwN4O+/7W2pto7ui7jqG5LbiLixqosEbUpYv/QHON2iCa K5fYaX37/bttDh1EcxPdq2juqz9/ll3IPvMJLAUzwFIwAywFM8BSMAMsBTPAUjADLAUzwFIwAywF u2FNrP32rS9+HF1Is8B2Oq13WNPprXn2eo3BKpq78yg7/e8vbyyiOeq+W9gus/OX2OmJa5vsdMfD k2xXWL3KmmKtAnu9r/3olzekObXffAJLwQywFMwAS8EMsBTMAEvBDLAUzABLwQywFMwAS8FumibW fvvmpz+IvpilVhu93lC1H82dOMiaWGP1ATRHLa1vobnZK6yJtdHZRnNjzRqa+/qTz9wUzan95hNY CmaApWAGWApmgKVgBlgKZoClYAZYCmaApWAGWApmE+ttcubRh9AX3dnqodcbG2an8FFLq+z0v+pA Gc099uPf2Zx6G/gEloIZYCmYAZaCGWApmAGWghlgKZgBloIZYCmYAZaC2cQK9ZWPvn9ff7jv//p5 m1OBfAJLwQywFMwAS8EMsBTMAEvBDLAUzABLwQywFMwAS8H+BWJYktycMne3AAAAAElFTkSuQmCC "
id="image5005-0"
x="805"
y="427.36218" />
<g
id="g4907">
<g
transform="translate(-85,24.999994)"
id="layer1-3"
inkscape:label="Layer 1">
<g
id="g3080-9-1"
transform="translate(830,-4.9999974)" />
<g
id="g3996-1-5-8"
transform="translate(825,-19.999997)" />
<g
id="g3928-7-2"
transform="translate(830,-19.999997)" />
</g>
<path
style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 805,607.36218 10,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0"
id="path3092"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="translate(1065,-35.000003)"
id="g3996-1-5" />
<g
id="g5035">
<image
width="240"
height="240"
xlink:href="data:image/png;base64,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
"
id="image5005"
x="680"
y="612.36218" />
<g
id="g4897">
<path
style="fill:none;stroke:#ff7d00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 800,612.36218 10,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 10,0 0,120"
id="path3874"
inkscape:connector-curvature="0" />
<g
transform="translate(-210,209.99999)"
id="layer1-3-1"
inkscape:label="Layer 1">
<g
id="g3080-9-1-2"
transform="translate(830,-4.9999974)" />
<g
id="g3996-1-5-8-3"
transform="translate(825,-19.999997)" />
<g
id="g3928-7-2-1"
transform="translate(830,-19.999997)" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@@ -0,0 +1,278 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3039"
version="1.1"
inkscape:version="0.48.1 r9760"
width="72.901756"
height="29.217323"
sodipodi:docname="texturecubing.svg"
inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/texturecubing.png"
inkscape:export-xdpi="374.43073"
inkscape:export-ydpi="374.43073">
<metadata
id="metadata3045">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3043">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path3827"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1003"
id="namedview3041"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="13.911765"
inkscape:cx="31.959"
inkscape:cy="19.037262"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
inkscape:current-layer="svg3039" />
<image
width="68"
height="24"
xlink:href="data:image/png;base64,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
AABJRU5ErkJggg==
"
id="image3047"
x="0.675354"
y="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 23.446285,12.004599 17.688134,0"
id="path3051"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="11.145916"
y="23.506634"
id="text4269"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271"
x="11.145916"
y="23.506634">16</tspan></text>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-0.43945312"
y="13.968932"
id="text4269-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6"
x="-0.43945312"
y="13.968932">16</tspan></text>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="52.828259"
y="28.110237"
id="text4269-1-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6-3"
x="52.828259"
y="28.110237">24</tspan></text>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="67.48555"
y="14.098909"
id="text4269-1-0-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6-3-5"
x="67.48555"
y="14.098909">24</tspan></text>
<g
id="g4430"
transform="translate(0,0.228726)">
<path
inkscape:connector-curvature="0"
id="path4338"
d="m 16.874887,21.796439 4.574517,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340"
d="m 21.474818,20.627396 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4434">
<path
inkscape:connector-curvature="0"
id="path4338-1"
d="m 10.381613,22.025165 -4.5745172,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1"
d="m 5.7816818,20.856122 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384"
transform="matrix(0,1,-1,0,7.6808557,3.3864966)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1"
d="m 5.4004719,5.4552459 -4.57451718,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384-0"
transform="matrix(0,-1,-1,0,7.6808557,20.67301)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-1"
d="m 5.4004719,5.4552459 -4.57451718,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-5"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4430-7"
transform="translate(45.402428,4.8040079)">
<path
inkscape:connector-curvature="0"
id="path4338-13"
d="m 12.86345,21.796439 8.585954,0"
style="fill:none;stroke:#000000;stroke-width:0.27400067;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-4"
d="m 21.474818,20.627396 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
transform="translate(36.920398,4.5752819)"
id="g4434-4">
<path
inkscape:connector-curvature="0"
id="path4338-1-2"
d="m 14.991246,22.025165 -9.1841502,0"
style="fill:none;stroke:#000000;stroke-width:0.28338501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-4"
d="m 5.7816818,20.856122 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384-6"
transform="matrix(0,1,-1,0,75.546286,-0.69995506)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-4"
d="m 10.749054,5.4552459 -9.92309928,0"
style="fill:none;stroke:#000000;stroke-width:0.29456493;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-9"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384-0-8"
transform="matrix(0,-1,-1,0,75.546286,25.032648)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-1-4"
d="m 9.7989769,5.4552459 -8.97302218,0"
style="fill:none;stroke:#000000;stroke-width:0.28010878;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-5-2"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,418 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3039"
version="1.1"
inkscape:version="0.48.1 r9760"
width="94.947617"
height="23.119883"
sodipodi:docname="texturesidesteps.svg"
inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/texturesidesteps.png"
inkscape:export-xdpi="374.69849"
inkscape:export-ydpi="374.69849">
<metadata
id="metadata3045">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3043">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path3827"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-6"
style="overflow:visible">
<path
id="path3827-4"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-5"
style="overflow:visible">
<path
id="path3827-2"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-9"
style="overflow:visible">
<path
id="path3827-6"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-2"
style="overflow:visible">
<path
id="path3827-47"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1003"
id="namedview3041"
showgrid="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="13.911765"
inkscape:cx="49.875962"
inkscape:cy="19.969891"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
inkscape:current-layer="svg3039"
inkscape:snap-global="true">
<inkscape:grid
type="xygrid"
id="grid3373"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<path
style="fill:none;stroke:#000000;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 24.006832,9.5371928 12.368895,0"
id="path3051"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="10.951706"
y="19.636997"
id="text4269"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271"
x="10.951706"
y="19.636997">16</tspan></text>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-0.43945312"
y="9.1254139"
id="text4269-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6"
x="-0.43945312"
y="9.1254139">16</tspan></text>
<g
id="g4430"
transform="translate(0.11114287,-3.671025)">
<path
inkscape:connector-curvature="0"
id="path4338"
d="m 16.874887,21.796439 4.574517,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340"
d="m 21.474818,20.627396 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4434"
transform="translate(-0.24654893,-3.899751)">
<path
inkscape:connector-curvature="0"
id="path4338-1"
d="m 10.381613,22.025165 -4.5745172,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1"
d="m 5.7816818,20.856122 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384"
transform="matrix(0,1,-1,0,8.0157928,-0.70054072)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1"
d="m 5.4004719,5.4552459 -4.57451718,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384-0"
transform="matrix(0,-1,-1,0,8.0157928,16.951369)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-1"
d="m 7.1950618,5.4552459 -6.36910709,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-5"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="90.129257"
y="12.630968"
id="text4269-1-0-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6-3-5"
x="90.129257"
y="12.630968">18</tspan></text>
<g
id="g4384-6"
transform="matrix(0,1,-1,0,98.015795,-0.16545677)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-4"
d="m 8.7299582,5.4552459 -7.93353338,0"
style="fill:none;stroke:#000000;stroke-width:0.29456493;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-9"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384-0-8"
transform="matrix(0,-1,-1,0,98.015791,21.422651)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-1-4"
d="m 7.5689781,5.4552459 -6.77729514,0"
style="fill:none;stroke:#000000;stroke-width:0.28010878;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-5-2"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="38.85527"
y="10.125414"
id="text4269-1-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6-2"
x="38.85527"
y="10.125414">12</tspan></text>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="49.200108"
y="18.765217"
id="text4269-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-5"
x="49.200108"
y="18.765217">12</tspan></text>
<g
id="g3559"
transform="translate(-0.26288613,-2.161309)">
<path
inkscape:connector-curvature="0"
id="path4338-0"
d="m 55.575368,19.286723 3.248065,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-2"
d="m 58.794972,18.11768 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
transform="translate(39.795695,-4.899751)"
id="g4434-8">
<path
inkscape:connector-curvature="0"
id="path4338-1-3"
d="m 9.2511678,22.025165 -3.4863155,0"
style="fill:none;stroke:#000000;stroke-width:0.22187975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-8"
d="m 5.7816818,20.856122 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g3150"
transform="translate(0.52887687,-2.7706882)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-0"
d="m 41.03167,8.8477478 0,-3.9516456"
style="fill:none;stroke:#000000;stroke-width:0.23969571;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-91"
d="m 42.200713,4.908985 -2.388915,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384-0-9"
transform="matrix(0,-1,-1,0,47.015793,15.893638)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-1-6"
d="m 4.5712133,5.4552459 -3.80298952,0"
style="fill:none;stroke:#000000;stroke-width:0.2402081;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-5-25"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 60.502945,9.2161088 12.368895,0"
id="path3051-5"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="80.560547"
y="23.046446"
id="text4269-0-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-5-0"
x="80.560547"
y="23.046446">12</tspan></text>
<g
id="g3581"
transform="translate(-4.0958405,-0.34470495)">
<path
inkscape:connector-curvature="0"
id="path4338-0-6"
d="m 90.40832,21.975673 3.248065,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-2-0"
d="m 93.627924,20.80663 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
transform="translate(70.778863,-0.22515395)"
id="g4434-8-8">
<path
inkscape:connector-curvature="0"
id="path4338-1-3-3"
d="m 9.2511678,22.025165 -3.4863155,0"
style="fill:none;stroke:#000000;stroke-width:0.22187975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-8-7"
d="m 5.7816818,20.856122 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<image
y="0.125414"
x="5.5605469"
id="image3521"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAlhJREFU
OI1tks9P02AYxz99IbjJBmtxaVFL6vBHlBgWSDwQSJYQE4Ih4eLBG/HswQMXb/wBxqgHLxrj/6AH
LyQkO0sYZwvDCm0drHXMUUxKPejbbMHv6cnzPj++3+f7KqufFhMhBHEcc3x8DEA2myUMQ/L5PJqm
EUUR7XabOI4RQhBFEUEQYJomQlEUOp0O+oDKlYtFzJzOjxffyWazdDod9vb2MHM6N4sWuVyOKIoY
HBxE13XOzs4QxgWNo1cumqbhtH0OTg4ByGQynLz9SbFY5DBuIYTg+sgY0bsWjUaD09NTmq89lEdz
t5ORyXmOausAGKtjeM+/ITHwOMfv920uPb3M4csDLEOl7gUAWIaK8ubJYuL4IaZeYHxU48PnL8xN
XsPxQ4C0GGBkcp68v4mpF6jWdrEMlX7HD6l7AaZewHabWIZ6rjHN1dbJGyqOH2IZKpVyCVEplwBw
/BDHDxmaWkoLVhamWVmYBqBSLqWxqRcAsN0m/XKDHGTvVxnWCzh+yMbWDqZeoO4F2G4zZSQlA/TN
3Lm61voVUfcC4iTB8UOGcxlkTigKd8dH00aJbdtFKMpfBvIoEjKW2rsbJVPJru/BvRtrAEJRqJRL
WIZK2I5Ynp0gThK2bZfl2YnUvjhJCNoncOs+ja/biO4NttvEdptUyiU2tnZS62S+m11r8yN1L0B5
9nAmqXtB6r08zviolg75H6QUAfR8nGptF8cPsd1mOqzuBVTKpfRvVMqllJUw/1kmi6RWxw97jtnN
pjvul8HKwnTP1qGpJeb2qz3eW4aavsulfwAjLTZzkwt4jwAAAABJRU5ErkJggg==
"
height="16"
width="16" />
<image
y="2.1254139"
x="45.560547"
id="image3521-0"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAlhJREFU OI1tks9P02AYxz99IbjJBmtxaVFL6vBHlBgWSDwQSJYQE4Ih4eLBG/HswQMXb/wBxqgHLxrj/6AH LyQkO0sYZwvDCm0drHXMUUxKPejbbMHv6cnzPj++3+f7KqufFhMhBHEcc3x8DEA2myUMQ/L5PJqm EUUR7XabOI4RQhBFEUEQYJomQlEUOp0O+oDKlYtFzJzOjxffyWazdDod9vb2MHM6N4sWuVyOKIoY HBxE13XOzs4QxgWNo1cumqbhtH0OTg4ByGQynLz9SbFY5DBuIYTg+sgY0bsWjUaD09NTmq89lEdz t5ORyXmOausAGKtjeM+/ITHwOMfv920uPb3M4csDLEOl7gUAWIaK8ubJYuL4IaZeYHxU48PnL8xN XsPxQ4C0GGBkcp68v4mpF6jWdrEMlX7HD6l7AaZewHabWIZ6rjHN1dbJGyqOH2IZKpVyCVEplwBw /BDHDxmaWkoLVhamWVmYBqBSLqWxqRcAsN0m/XKDHGTvVxnWCzh+yMbWDqZeoO4F2G4zZSQlA/TN 3Lm61voVUfcC4iTB8UOGcxlkTigKd8dH00aJbdtFKMpfBvIoEjKW2rsbJVPJru/BvRtrAEJRqJRL WIZK2I5Ynp0gThK2bZfl2YnUvjhJCNoncOs+ja/biO4NttvEdptUyiU2tnZS62S+m11r8yN1L0B5 9nAmqXtB6r08zviolg75H6QUAfR8nGptF8cPsd1mOqzuBVTKpfRvVMqllJUw/1kmi6RWxw97jtnN pjvul8HKwnTP1qGpJeb2qz3eW4aavsulfwAjLTZzkwt4jwAAAABJRU5ErkJggg== "
height="13"
width="13" />
<image
y="-44.076839"
x="88.404503"
id="image3521-0-7"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAlhJREFU OI1tks9P02AYxz99IbjJBmtxaVFL6vBHlBgWSDwQSJYQE4Ih4eLBG/HswQMXb/wBxqgHLxrj/6AH LyQkO0sYZwvDCm0drHXMUUxKPejbbMHv6cnzPj++3+f7KqufFhMhBHEcc3x8DEA2myUMQ/L5PJqm EUUR7XabOI4RQhBFEUEQYJomQlEUOp0O+oDKlYtFzJzOjxffyWazdDod9vb2MHM6N4sWuVyOKIoY HBxE13XOzs4QxgWNo1cumqbhtH0OTg4ByGQynLz9SbFY5DBuIYTg+sgY0bsWjUaD09NTmq89lEdz t5ORyXmOausAGKtjeM+/ITHwOMfv920uPb3M4csDLEOl7gUAWIaK8ubJYuL4IaZeYHxU48PnL8xN XsPxQ4C0GGBkcp68v4mpF6jWdrEMlX7HD6l7AaZewHabWIZ6rjHN1dbJGyqOH2IZKpVyCVEplwBw /BDHDxmaWkoLVhamWVmYBqBSLqWxqRcAsN0m/XKDHGTvVxnWCzh+yMbWDqZeoO4F2G4zZSQlA/TN 3Lm61voVUfcC4iTB8UOGcxlkTigKd8dH00aJbdtFKMpfBvIoEjKW2rsbJVPJru/BvRtrAEJRqJRL WIZK2I5Ynp0gThK2bZfl2YnUvjhJCNoncOs+ja/biO4NttvEdptUyiU2tnZS62S+m11r8yN1L0B5 9nAmqXtB6r08zviolg75H6QUAfR8nGptF8cPsd1mOqzuBVTKpfRvVMqllJUw/1kmi6RWxw97jtnN pjvul8HKwnTP1qGpJeb2qz3eW4aavsulfwAjLTZzkwt4jwAAAABJRU5ErkJggg== "
height="13"
width="15.011107"
transform="matrix(0.8660254,0.5,0,1,0,0)" />
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,524 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3039"
version="1.1"
inkscape:version="0.48.1 r9760"
width="159.3623"
height="30.247282"
sodipodi:docname="texturetopsteps.svg"
inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/texturetopsteps.png"
inkscape:export-xdpi="374.69849"
inkscape:export-ydpi="374.69849">
<metadata
id="metadata3045">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3043">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path3827"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-6"
style="overflow:visible">
<path
id="path3827-4"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-5"
style="overflow:visible">
<path
id="path3827-2"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-9"
style="overflow:visible">
<path
id="path3827-6"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-2"
style="overflow:visible">
<path
id="path3827-47"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1003"
id="namedview3041"
showgrid="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="9.8371034"
inkscape:cx="74.214175"
inkscape:cy="30.126028"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
inkscape:current-layer="svg3039"
inkscape:snap-global="true">
<inkscape:grid
type="xygrid"
id="grid3373"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<path
style="fill:none;stroke:#000000;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 23.671895,12.815106 12.368895,0"
id="path3051"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="10.585018"
y="23.147282"
id="text4269"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271"
x="10.585018"
y="23.147282">16</tspan></text>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="-0.43945312"
y="13.329247"
id="text4269-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6"
x="-0.43945312"
y="13.329247">16</tspan></text>
<g
id="g4430"
transform="translate(-2.064209e-8,-0.41096005)">
<g
id="g3167"
transform="translate(-0.2237942,-0.23819646)">
<path
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 16.874887,21.796439 4.574517,0"
id="path4338"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 21.474818,20.627396 0,2.388915"
id="path4340"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g4434"
transform="translate(-0.58148602,-0.87788255)">
<path
inkscape:connector-curvature="0"
id="path4338-1"
d="m 10.381613,22.025165 -4.5745172,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1"
d="m 5.7816818,20.856122 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384"
transform="matrix(0,1,-1,0,7.6808557,2.3213277)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1"
d="m 5.4004719,5.4552459 -4.57451718,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384-0"
transform="matrix(0,-1,-1,0,7.6808557,19.973238)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-1"
d="m 5.4004719,5.4552459 -4.57451718,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-5"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="91.225609"
y="30.147282"
id="text4269-1-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6-3"
x="91.225609"
y="30.147282">24</tspan></text>
<g
id="g4430-7"
transform="translate(84.750792,7.1309714)">
<path
inkscape:connector-curvature="0"
id="path4338-13"
d="m 12.86345,21.796439 8.585954,0"
style="fill:none;stroke:#000000;stroke-width:0.27400067;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-4"
d="m 21.474818,20.627396 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
transform="translate(75.443928,6.9022454)"
id="g4434-4">
<path
inkscape:connector-curvature="0"
id="path4338-1-2"
d="m 12.988555,22.025165 -7.2118871,0"
style="fill:none;stroke:#000000;stroke-width:0.28338501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-4"
d="m 5.7816818,20.856122 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="106.66866"
y="15.147283"
id="text4269-1-0-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6-3-5"
x="106.66866"
y="15.147283">24</tspan></text>
<g
id="g4384-6"
transform="matrix(0,1,-1,0,114.68086,-0.67867225)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-4"
d="m 10.749054,5.4552459 -9.92309928,0"
style="fill:none;stroke:#000000;stroke-width:0.29456493;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-9"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384-0-8"
transform="matrix(0,-1,-1,0,114.68086,26.490551)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-1-4"
d="m 9.7989769,5.4552459 -8.97302218,0"
style="fill:none;stroke:#000000;stroke-width:0.28010878;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-5-2"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="38.520332"
y="13.949646"
id="text4269-1-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6-2"
x="38.520332"
y="13.949646">17</tspan></text>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="50.180183"
y="23.822674"
id="text4269-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-5"
x="50.180183"
y="23.822674">17</tspan></text>
<g
id="g4430-9"
transform="translate(39.446396,0.35084349)">
<g
id="g3273"
transform="translate(1.3298097,0)">
<path
style="fill:none;stroke:#000000;stroke-width:0.2307175;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 15.361801,21.796439 6.087603,0"
id="path4338-0"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 21.474818,20.627396 0,2.388915"
id="path4340-2"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="translate(38.443928,0.29116049)"
id="g4434-8">
<path
inkscape:connector-curvature="0"
id="path4338-1-3"
d="m 11.437254,22.025165 -5.6301582,0"
style="fill:none;stroke:#000000;stroke-width:0.22187975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-8"
d="m 5.7816818,20.856122 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384-04"
transform="matrix(0,1,-1,0,46.680856,2.539301)">
<g
id="g3269"
transform="translate(-1.2375804,0)">
<path
style="fill:none;stroke:#000000;stroke-width:0.23969573;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 8.4911248,5.4552459 -7.64556298,0"
id="path4338-1-1-0"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 0.80054072,4.2862029 0,2.388915"
id="path4340-1-1-91"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g4384-0-9"
transform="matrix(0,-1,-1,0,46.680856,20.941047)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-1-6"
d="m 5.6238969,5.4552459 -4.83013261,0"
style="fill:none;stroke:#000000;stroke-width:0.2402081;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-5-25"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
transform="translate(123.16392,-0.89789155)"
id="g4434-4-3">
<path
inkscape:connector-curvature="0"
id="path4338-1-2-8"
d="m 15.061689,22.025165 -9.2675253,0"
style="fill:none;stroke:#000000;stroke-width:0.28338501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-4-5"
d="m 5.7816818,20.856122 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="138.72321"
y="22.759771"
id="text4269-1-0-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6-3-55"
x="138.72321"
y="22.759771">24</tspan></text>
<g
id="g4430-7-4"
transform="translate(132.75656,-0.64915655)">
<path
inkscape:connector-curvature="0"
id="path4338-13-9"
d="m 11.469049,21.796439 10.000003,0"
style="fill:none;stroke:#000000;stroke-width:0.27400067;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-4-8"
d="m 21.474818,20.627396 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono"
x="154.6709"
y="14.147283"
id="text4269-1-0-8-2"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4271-6-3-5-2"
x="154.6709"
y="14.147283">12</tspan></text>
<g
id="g4384-6-2"
transform="matrix(0,1,-1,0,162.68086,5.4158408)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-4-7"
d="m 4.2867589,5.4552459 -3.55531726,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-9-0"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g4384-0-8-3"
transform="matrix(0,-1,-1,0,162.68086,18.883996)">
<path
inkscape:connector-curvature="0"
id="path4338-1-1-1-4-4"
d="m 3.9921742,5.4552459 -3.25546137,0"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4340-1-1-5-2-6"
d="m 0.80054072,4.2862029 0,2.388915"
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 65.203951,12.815106 12.368895,0"
id="path3051-5"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 112.78957,12.815106 12.3689,0"
id="path3051-0"
inkscape:connector-curvature="0" />
<image
y="3.1472826"
x="5.2256098"
id="image3147"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAu5JREFU
OI0l09tuG0UAgOF/Zsd79GFtx3WcpG2gbZAqVA4XlRBXiCseA4kH4SG44Ym4A9QqQiISTZNUbmI7
dna9p9nZGS76Dt8nfv7tByekwHaOOtcA+JGi2DVEgx7JJKStO+p9i+0sUgp03VFsa6aPByghQJct
g4MITwmEFOyWBX6kaEpDleecvJyQpAH5pmZ/XxMmCuXHOOtQ0TBg/jzFNB3v36xRPUkvVPRCj17o
4SlJUxr8SDE+Sqj3mmxV4UeKp1/NUFdv18QjH6/nMZiGGG3phR73N3ucdUgl8bYNfqwIYoUfKrwD
ifQEF38skY+/nOIszJ+NyNc1k+M+w1lEkPQ4/eYRX3x/RJU11LkmTgMmJ33qXGO0JU4DxC+//+hw
sLrMePLqgOXFjuEsAudQvke2roiHPlXe0rWWpmiJ0wDlS5Tv4X327aNfk3HI5DghW1UEsaLYNlgL
+aZGCIFpLU9fHZCkIc7B+DjBdg6jLTIZh2Srkrbu6FqLtY62MYyPEryeZDANWZyNef9mzfX5Bmcd
punYfSwZHyWoMtNMjhLSRUI48JFSUD5o/EiRHiaM5jG6MnStpT8OqHKNVBKc4+Z8gxo9itguCyYn
fTbXOThHOo+xneP+JidblQRxjyQNGM1jOmOZnQ6xxlJmGukpyeSkz+oyIz2MaUrD9MmA+5uc/jTi
7LsFu48Fg1nE8t8dQghuzjfoyhAPfeTutiQeBRTbBmdhOIt49+cdnpLosuXDP/eMFwnbD3va2lDs
GnRl0JXBtBb5/PUh2V2JaS3bZYGQgmjgU+Wa8kFz+dcK58BaEFIwOx2yOEvpjKVrO5TtLMk45O5d
RrPX1LlGegKE4OufTrn974HFi5T1VU6da4SAzfX+E2NfovJ1jbWOwTSkyjTPXh/S1oaH25LLv1fk
q5Jm/2lpmWnmn48YziI21znDWYRcX2U0RYtzUBct5UPDflMDsHiREqcBxy+nbJcFRluWFzuqXGM7
h7WO/wHXo4ijnKBzSAAAAABJRU5ErkJggg==
"
height="16"
width="16" />
<image
y="2.1472826"
x="44.225609"
id="image3147-9"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAu5JREFU OI0l09tuG0UAgOF/Zsd79GFtx3WcpG2gbZAqVA4XlRBXiCseA4kH4SG44Ym4A9QqQiISTZNUbmI7 dna9p9nZGS76Dt8nfv7tByekwHaOOtcA+JGi2DVEgx7JJKStO+p9i+0sUgp03VFsa6aPByghQJct g4MITwmEFOyWBX6kaEpDleecvJyQpAH5pmZ/XxMmCuXHOOtQ0TBg/jzFNB3v36xRPUkvVPRCj17o 4SlJUxr8SDE+Sqj3mmxV4UeKp1/NUFdv18QjH6/nMZiGGG3phR73N3ucdUgl8bYNfqwIYoUfKrwD ifQEF38skY+/nOIszJ+NyNc1k+M+w1lEkPQ4/eYRX3x/RJU11LkmTgMmJ33qXGO0JU4DxC+//+hw sLrMePLqgOXFjuEsAudQvke2roiHPlXe0rWWpmiJ0wDlS5Tv4X327aNfk3HI5DghW1UEsaLYNlgL +aZGCIFpLU9fHZCkIc7B+DjBdg6jLTIZh2Srkrbu6FqLtY62MYyPEryeZDANWZyNef9mzfX5Bmcd punYfSwZHyWoMtNMjhLSRUI48JFSUD5o/EiRHiaM5jG6MnStpT8OqHKNVBKc4+Z8gxo9itguCyYn fTbXOThHOo+xneP+JidblQRxjyQNGM1jOmOZnQ6xxlJmGukpyeSkz+oyIz2MaUrD9MmA+5uc/jTi 7LsFu48Fg1nE8t8dQghuzjfoyhAPfeTutiQeBRTbBmdhOIt49+cdnpLosuXDP/eMFwnbD3va2lDs GnRl0JXBtBb5/PUh2V2JaS3bZYGQgmjgU+Wa8kFz+dcK58BaEFIwOx2yOEvpjKVrO5TtLMk45O5d RrPX1LlGegKE4OufTrn974HFi5T1VU6da4SAzfX+E2NfovJ1jbWOwTSkyjTPXh/S1oaH25LLv1fk q5Jm/2lpmWnmn48YziI21znDWYRcX2U0RYtzUBct5UPDflMDsHiREqcBxy+nbJcFRluWFzuqXGM7 h7WO/wHXo4ijnKBzSAAAAABJRU5ErkJggg== "
height="18"
width="18" />
<image
y="-65.816315"
x="66.409378"
id="image3147-9-7"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAu5JREFU OI0l09tuG0UAgOF/Zsd79GFtx3WcpG2gbZAqVA4XlRBXiCseA4kH4SG44Ym4A9QqQiISTZNUbmI7 dna9p9nZGS76Dt8nfv7tByekwHaOOtcA+JGi2DVEgx7JJKStO+p9i+0sUgp03VFsa6aPByghQJct g4MITwmEFOyWBX6kaEpDleecvJyQpAH5pmZ/XxMmCuXHOOtQ0TBg/jzFNB3v36xRPUkvVPRCj17o 4SlJUxr8SDE+Sqj3mmxV4UeKp1/NUFdv18QjH6/nMZiGGG3phR73N3ucdUgl8bYNfqwIYoUfKrwD ifQEF38skY+/nOIszJ+NyNc1k+M+w1lEkPQ4/eYRX3x/RJU11LkmTgMmJ33qXGO0JU4DxC+//+hw sLrMePLqgOXFjuEsAudQvke2roiHPlXe0rWWpmiJ0wDlS5Tv4X327aNfk3HI5DghW1UEsaLYNlgL +aZGCIFpLU9fHZCkIc7B+DjBdg6jLTIZh2Srkrbu6FqLtY62MYyPEryeZDANWZyNef9mzfX5Bmcd punYfSwZHyWoMtNMjhLSRUI48JFSUD5o/EiRHiaM5jG6MnStpT8OqHKNVBKc4+Z8gxo9itguCyYn fTbXOThHOo+xneP+JidblQRxjyQNGM1jOmOZnQ6xxlJmGukpyeSkz+oyIz2MaUrD9MmA+5uc/jTi 7LsFu48Fg1nE8t8dQghuzjfoyhAPfeTutiQeBRTbBmdhOIt49+cdnpLosuXDP/eMFwnbD3va2lDs GnRl0JXBtBb5/PUh2V2JaS3bZYGQgmjgU+Wa8kFz+dcK58BaEFIwOx2yOEvpjKVrO5TtLMk45O5d RrPX1LlGegKE4OufTrn974HFi5T1VU6da4SAzfX+E2NfovJ1jbWOwTSkyjTPXh/S1oaH25LLv1fk q5Jm/2lpmWnmn48YziI21znDWYRcX2U0RYtzUBct5UPDflMDsHiREqcBxy+nbJcFRluWFzuqXGM7 h7WO/wHXo4ijnKBzSAAAAABJRU5ErkJggg== "
height="18"
width="18"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
<image
y="-72.128647"
x="85.508072"
id="image3147-9-7-7"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAu5JREFU OI0l09tuG0UAgOF/Zsd79GFtx3WcpG2gbZAqVA4XlRBXiCseA4kH4SG44Ym4A9QqQiISTZNUbmI7 dna9p9nZGS76Dt8nfv7tByekwHaOOtcA+JGi2DVEgx7JJKStO+p9i+0sUgp03VFsa6aPByghQJct g4MITwmEFOyWBX6kaEpDleecvJyQpAH5pmZ/XxMmCuXHOOtQ0TBg/jzFNB3v36xRPUkvVPRCj17o 4SlJUxr8SDE+Sqj3mmxV4UeKp1/NUFdv18QjH6/nMZiGGG3phR73N3ucdUgl8bYNfqwIYoUfKrwD ifQEF38skY+/nOIszJ+NyNc1k+M+w1lEkPQ4/eYRX3x/RJU11LkmTgMmJ33qXGO0JU4DxC+//+hw sLrMePLqgOXFjuEsAudQvke2roiHPlXe0rWWpmiJ0wDlS5Tv4X327aNfk3HI5DghW1UEsaLYNlgL +aZGCIFpLU9fHZCkIc7B+DjBdg6jLTIZh2Srkrbu6FqLtY62MYyPEryeZDANWZyNef9mzfX5Bmcd punYfSwZHyWoMtNMjhLSRUI48JFSUD5o/EiRHiaM5jG6MnStpT8OqHKNVBKc4+Z8gxo9itguCyYn fTbXOThHOo+xneP+JidblQRxjyQNGM1jOmOZnQ6xxlJmGukpyeSkz+oyIz2MaUrD9MmA+5uc/jTi 7LsFu48Fg1nE8t8dQghuzjfoyhAPfeTutiQeBRTbBmdhOIt49+cdnpLosuXDP/eMFwnbD3va2lDs GnRl0JXBtBb5/PUh2V2JaS3bZYGQgmjgU+Wa8kFz+dcK58BaEFIwOx2yOEvpjKVrO5TtLMk45O5d RrPX1LlGegKE4OufTrn974HFi5T1VU6da4SAzfX+E2NfovJ1jbWOwTSkyjTPXh/S1oaH25LLv1fk q5Jm/2lpmWnmn48YziI21znDWYRcX2U0RYtzUBct5UPDflMDsHiREqcBxy+nbJcFRluWFzuqXGM7 h7WO/wHXo4ijnKBzSAAAAABJRU5ErkJggg== "
height="14.179651"
width="14.179651"
transform="matrix(0.89761886,0.44077249,-0.89761886,0.44077249,0,0)" />
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

23
docs/faq.rst Normal file
View File

@@ -0,0 +1,23 @@
==========================
Frequently Asked Questions
==========================
**The full map doesn't display even when fully zoomed out!**
Are you using the :option:`-z` or :option:`--zoom <-z>` option on your commandline or
in settings.py? If so, try removing it, or increasing the value you set.
It's quite likely you don't need it at all. See the documentation for the
:option:`zoom <-z>` option.
**You've added a few feature, but it's not showing up on my map!**
Some new features will only show up in newly-rendered areas. Use the
:option:`--forcerender` option to update the entire map.
**How do I use this on CentOS 5?**
CentOS 5 comes with Python 2.4, but the Overviewer needs 2.6 or higher. See
the special instructions at :ref:`centos`
**The background color of the map is black, and I don't like it!**
You can change this by using the :option:`--bg-color` command line option, or
``bg_color`` in settings.py. See the :doc:`options` page for more
details.

109
docs/index.rst Normal file
View File

@@ -0,0 +1,109 @@
..
Hey! You! Read these docs at http://docs.overviewer.org
Go there now!
========================
The Minecraft Overviewer
========================
Introduction
============
The Minecraft Overviewer is a command-line tool for rendering high-resolution
maps of Minecraft worlds. It generates a set of static html and image files and
uses the Google Maps API to display a nice interactive map.
The Overviewer has been in active development for over a year and has many
features, including day and night lighting, cave rendering, mineral overlays,
and many plugins for even more features! It is written mostly in Python with
critical sections in C as an extension module.
For a simple example of what your renders will look like, head over to `The
"Exmaple" Map <http://overviewer.org/example/>`_. For more user-contributed
examples, see `The Example Wiki Page <https://github.com/overviewer/Minecraft-Overviewer/wiki/Map-examples>`_.
Features
========
* Renders large resolution images of your world, such that you can zoom in and
see details
* Customizable textures! Pulls textures straight from your installed texture
pack!
* Outputs a Google Map powered interface that is memory efficient, both in
generating and viewing.
* Renders efficiently in parallel, using as many simultaneous processes as you
want!
* Utilizes caching to speed up subsequent renderings of your world.
* Throw the output directory up on a web server to share your Minecraft world
with everyone!
Requirements
============
This is a quick list of what's required to run The Overviewer. It runs on
Windows, Mac, and Linux as long as you have these software packages installed:
* Python 2.6 or 2.7
* PIL (Python Imaging Library)
* Numpy
* Either a Minecraft Client installed or a terrain.png for the textures.
There are additional requirements for compiling it. More details are available
in either the :doc:`Building <building>` or :doc:`Installing <installing>` pages.
Getting Started
===============
The Overviewer works with Linux, Mac, and Windows! We provide Windows and Debian
built executables for your convenience. Find them as well as the full sources on
our `Github Homepage`_.
**If you are running Windows, Debian, or Ubuntu and would like the pre-built
packages and don't want to have to compile anything yourself**, head to the
:doc:`installing` page.
**If you would like to build the Overviewer from source yourself (it's not that
bad)**, head to the :doc:`Building <building>` page.
.. _Github Homepage: https://github.com/overviewer/Minecraft-Overviewer
Help
====
**IF YOU NEED HELP COMPILING OR RUNNING THE OVERVIEWER** feel free to chat with
us live in IRC: #overviewer on Freenode. There's usually someone on there that
can help you out. Not familiar with IRC? `Use the web client
<http://webchat.freenode.net/?channels=overviewer>`_.
If you think you've found a bug or other issue, file an issue on our `Issue
Tracker <https://github.com/overviewer/Minecraft-Overviewer/issues>`_. Filing or
commenting on an issue sends a notice to our IRC channel, so the response time
is often very good!
Documentation Contents
======================
.. toctree::
:maxdepth: 2
building
installing
running
options
faq
design/designdoc
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

35
docs/installing.rst Normal file
View File

@@ -0,0 +1,35 @@
==========
Installing
==========
This page is for installing the pre-compiled binary versions of the Overviewer.
If you have built the Overviewer from source yourself, head back to
:doc:`Building <building>`.
Windows
=======
Running Windows and don't want to compile the Overviewer? You've come to the
right place!
1. Head to the `Downloads <https://github.com/overviewer/Minecraft-Overviewer/downloads>`_ page and download the most recent Windows download for your architecture (32 or 64 bit).
2. For 32 bit you may need to install the `VC++ 2008 <http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf>`_ and `VC++ 2010 <http://www.microsoft.com/downloads/en/details.aspx?familyid=a7b7a05e-6de6-4d3a-a423-37bf0912db84>`_ redistributables.
For 64 bit, you'll want these instead: `VC++ 2008 <http://www.microsoft.com/downloads/en/details.aspx?familyid=bd2a6171-e2d6-4230-b809-9a8d7548c1b6>`_ and `VC++ 2010 <http://www.microsoft.com/download/en/details.aspx?id=14632>`_
3. That's it! Proceed with instructions on :doc:`Running <running>` the
Overviewer.
Debian / Ubuntu
===============
We provide an APT repository with pre-built Overviewer packages for Debian and
Ubuntu users. To do this, add the following line to your
``/etc/apt/sources.list``
::
deb http://overviewer.org/debian ./
Then run ``apt-get update`` and ``apt-get install minecraft-overviewer`` and
you're all set! See you at the :doc:`running` page!

699
docs/options.rst Normal file
View File

@@ -0,0 +1,699 @@
====================
Settings and Options
====================
Overviewer settings can be set in two places, on the command line when you run
the overviewer, or in a settings file. You specify a settings file to use with
the :option:`--settings` command line option.
.. note::
Any command line option can optionally be set in the settings file. However,
there are some settings that can only be set in the settings file.
.. note::
Some options go by different names on the command line and the settings
file. Those are noted in bold below.
The first section of this document covers command line options. The second part
covers the more advanced ways of customizing The Overviewer using settings
files.
.. contents::
:local:
Command line options
====================
.. cmdoption:: -h, --help
Shows the list of options and exits
.. cmdoption:: --advanced-help
Display help - including advanced options
Useful Options
--------------
.. cmdoption:: --settings <PATH>
Use this option to load settings from a file. For more information see the
`Settings File`_ section below.
**Not available in settings file (duh)**
.. cmdoption:: --north-direction <NORTH_DIRECTION>
Specifies which corner of the screen north will point to.
Valid options are: lower-left, upper-left, upper-right, lower-right.
If you do not specify this option, it will default to whatever direction
the existing map uses. For new maps, it defaults to lower-left for
historical reasons.
.. note::
We define cardinal directions by the sun in game; the sun rises in the
East and sets in the West.
**Settings file:**
Option name: ``north_direction``
Format: One of the above strings.
.. cmdoption:: --rendermodes <MODE1>[,MODE2,...]
Use this option to specify which render mode to use, such as lighting or
night. Use :option:`--list-rendermodes` to get a list of available
rendermodes, and a short description of each. If you provide more than one
mode (separated by commas), Overviewer will render all of them at once, and
provide a toggle on the resulting map to switch between them.
If for some reason commas do not work for your shell (like if you're using
Powershell on Windows), you can also use a colon ':' or a forward slash '/'
to separate the modes.
Incomplete list of common render-modes for your convenience:
* normal
* lighting
* night
Example::
./overviewer.py --rendermodes=lighting,night /opt/server/world /opt/map
**Settings file:**
Option name: ``rendermode`` **Note the lack of an s**
Format: a list of strings.
Default: only render the normal mode
See the `Render Modes`_ section for more information.
.. cmdoption:: --list-rendermodes
List the available render modes, and a short description of each, and exit.
**Not available in settings file**
Less Useful Options
-------------------
.. cmdoption:: --bg-color <color>
Configures the background color for the Google Map output. Specify in
#RRGGBB format.
**Settings file:**
Option name: ``bg_color``
Format: A string in the above format.
Default: "#1A1A1A"
.. cmdoption:: --changelist <filename>
Outputs a list of changed tiles to the named file. If the file doesn't
exist, it is created. If it does exist, its contents are overwritten.
This could be useful for example in conjunction with a script to upload only
changed tiles to your web server.
**Settings file:**
Option name: ``changelist``
Format: String (path plus filename)
Default: Not specified (no changelist outputted)
.. cmdoption:: --changelist-format <format>
Chooses absolute or relative paths for the output with the
:option:`--changelist` option. Valid values for format are "relative" or
"absolute".
**Settings file:**
Option name: ``changelist_format``
Format: A string (one of the above)
Default: "relative"
.. cmdoption:: --check-terrain
When this option appears on the command line, Overviewer prints the location
and hash of the terrain.png it will use, and then exits.
This is useful for debugging terrain.png path problems, especially with
:option:`--textures-path`. Use this to see what terrain.png your current
setup has selected.
See the :ref:`installing-textures` section for an example.
**Not available in settings file**
.. cmdoption:: --display-config
Display the configuration parameters and exit. Doesn't render the map. This
is useful to help validate a configuration setup.
**Not available in settings file**
.. cmdoption:: --forcerender
Force re-rendering the entire map (or the given regionlist). This
is an easier way to completely re-render without deleting the map.
This is useful if you change texture packs and want to re-render everything
in the new textures, or if you're changing the :option:`--north-direction`.
**Settings file:**
Option name: ``forcerender``
Format: A boolean
Default: False
.. cmdoption:: --imgformat <format>
Specifies the output format for the tiles. Currently supported options are
"png" or "jpg".
**Settings file:**
Option name: ``imgformat``
Format: A string, either "png" or "jpg"
Default: "png"
.. cmdoption:: --imgquality <quality>
When using ":option:`--imgformat` jpg", this specifies the jpeg quality
parameter. This can help save disk space for larger maps.
For saving space with pngs, see :option:`--optimize-img`
**Settings file:**
Option name: ``imgquality``
Format: An integer 1-100
Default: 95
.. cmdoption:: --no-signs
Doesn't output signs to markers.js. This has the effect of disabling signs
on your map.
**Settings file:**
Option name: ``nosigns``
Format: Boolean
Default: False
.. cmdoption:: --optimize-img <level>
When using ":option:`--imgformat` png" (the default), this performs file
size optimizations on the output. The level parameter is an integer
specifying one of the following:
1. Run pngcrush on all tiles
2. Run pngcrush plus advdef on all tiles
3. Run pngcrush plus advdef with more aggressive settings.
These options may double the time or worse it takes to render your map, and
can be expected to give around 19-23% reduction in file size.
These options also require the corresponding program(s) installed and in
your system path ($PATH or %PATH% environment variable)
**Settings file:**
Option name: ``optimizeimg``
Format: an integer
Default: not set (no optimization)
.. cmdoption:: -p <procs>, --processes <procs>
On multi-cored or multi-processor machines, The Overviewer will perform its
work on *all* cores by default. If you want to manually specify how many
workers to run in parallel, use this option.
Example to run 5 worker processes in parallel::
overviewer.py -p 5 <Path to World> <Output Directory>
**Settings file:**
Option name: ``procs``
Format: an integer.
Default: ``multiprocessing.cpu_count()``
.. cmdoption:: -q, --quiet
Prints less output. You can specify this multiple times.
**Settings file:**
Option name: ``quiet``
Format: an integer
Default: 0
.. cmdoption:: --regionlist <regionlist>
Use this option to specify manually a list of regions to consider for
updating. In normal operation, every chunk in every region is checked for
update and if necessary, re-rendered. With this option, only the chunks in
the specified regions are checked.
This option should name a file containing, 1 per line, the path to the
region files to be considered for update.
It's up to you to build such a list. On Linux or Mac, try using the "find"
command. You could, for example, output all region files that are older than
a certain date. Or perhaps you can incrementally update your map by passing
in a subset of regions each time. It's up to you!
**Settings file:**
Option name: ``regionlist``
Format: A string representing the region list file.
Default: Scan all region files.
.. note::
See sample.settings.py for an example on how to build a region list
file.
.. cmdoption:: --skip-js
Skip the generation and output of markers.js and regions.js to the output
directory.
**Settings file:**
Option name: ``skipjs``
Format: Boolean
Default: False
.. cmdoption:: --textures-path <path>
Use this option to specify an alternate terrain.png to use for textures when
rendering a world. ``path`` specifies the **containing directory** of
terrain.png.
The Overviewer will look for terrain.png in the following places in this
order: path specified by this option, the program's directory, the
overviewer_core/data/textures directory within the source directory, the
default textures that come with Minecraft if it's installed.
.. note::
If you installed Overviewer from the Debian package or chose to install
the overviewer from source (``python setup.py install``), then there
isn't a source directory; this option may be necessary to specify
non-default textures.
If you're having trouble getting The Overviewer to recognize your textures,
see the :option:`--check-terrain` option.
Also see the :ref:`installing-textures` section of the documentation.
**Settings file:**
Option name: ``textures_path``
Format: A string (path to a dir with a terrain.png)
Default: None
.. cmdoption:: -v, --verbose
Prints more output. You can specify this multiple times.
**Settings file:**
Option name: ``verbose``
Format: an integer
Default: 0
.. cmdoption:: -V, --version
Displays the version information and exits
**Not available in settings file**
.. cmdoption:: --web-assets-path <path>
When The Overviewer runs, it copies the files from the web_assets directory
to the destination directory. If you wish to override a file with your own,
for example, to make changes, you may put your modified copies in your own
directory and specify the directory with this option.
Files in the folder specified by ``path`` will override files from the
web_assets directory, letting you customize the files.
If you're running from source and are comfortable merging with Git, it may
be better to edit the web_assets directly. If we update one of the files,
you can use Git to merge in our changes with yours.
If, however, you do not like Git, and don't mind having to manually update
or merge web assets (or don't care for web asset updates at all), then copy
all the web assets to a directory of your own and use this option.
See the :ref:`web-assets` section for more info on customizing your web
assets.
**Settings file:**
Option name: ``web_assets_path``
Format: A string (path to a directory to use for custom web assets)
Default: Not set (no additional web assets used)
.. cmdoption:: -z <zoom>, --zoom <zoom>
.. warning::
This option does not do what you think it does. You almost certainly do
not want to set this.
This option effectively sets *how far the map can be zoomed out*. The
Overviewer will by default determine how many *zoom levels* your map needs
to show the entire map. This option overrides that; setting this option
lower than automatically determined will *crop your map* and parts will be
cut off. (We acknowledge that name zoom is misleading)
To be precise, it sets the width and height of the highest zoom level, in
tiles. A zoom level of z means the highest zoom level of your map will be
2^z by 2^z tiles.
This option map be useful if you have some outlier chunks causing your map
to be too large, or you want to render a smaller portion of your map,
instead of rendering everything.
**If you are getting a "your map is waaaay too big" error** then this option
may help you render your map. That error is unlikely in naturally generated
worlds, but some really giant worlds may still cross the threshold. The
Overviewer will refuse to automatically render maps that require zoom level
15 and above, so if you get this error, try specifying ``--zoom 15``. If
your map is still cut off around the edges, increase the zoom level by 1 and
try again.
**Settings file:**
Option name: ``zoom``
Format: An integer.
Default: Automatically calculated from the world size.
.. note::
There are **more settings** that cannot be specified on the command line.
See the section below!
Settings File
=============
You can optionally store settings in a file named settings.py (or really,
anything you want). It is a regular python script, so you can use any python
functions or modules you want. To use a settings file, use the
:option:`--settings` command line option when you run the Overviewer.
For a sample settings file, look at 'sample.settings.py'. Note that this file is
not meant to be used directly, but instead it should be used as a collection of
examples to guide writing your own. It contains a number of examples to get you
started, but you almost certainly don't want to use it as-is.
You can specify *any of the above* options in your settings file *in addition to
the ones documented below*. For the command-line options, find its listed
"Option name" which is the Python identifier you will use. For example, if you
wanted to specify :option:`--bg-color`, you would look and see its option name
is "bg_color" (note the underscore) and you would put this line in your settings
file::
bg_color = "#000000"
Settings file options
---------------------
In addition to the `Command line options`_, you can specify these options.
.. describe:: web_assets_hook
This option lets you define a function to run after the web assets have
been copied into the output directory, but before any tile rendering takes
place. This is an ideal time to do any custom postprocessing for
markers.js or other web assets.
Set this identifier to a Python *function object* to be called.
This function should accept one argument: a
:class:`overviewer_core.googlemap.MapGen` object.
.. warning::
Currently, this option only works if the :option:`--skip-js` option is
set
.. describe:: rendermode_options
Different rendermodes have different options. This option is a dictionary
that maps rendermode names to option dictionaries.
See the `Render Modes`_ section for relevant options to the render modes.
.. describe:: custom_rendermodes
You can also specify your own custom rendermodes with this option. This is a
dictionary mapping your rendermode name to a dictionary of parameters to
use.
See the `Defining Custom Rendermodes`_ section for more information.
Render Modes
============
A rendermode is a unique way of rendering a Minecraft map. The normal render
mode was the original, and we've since added a render mode with proper lighting,
a rendermode for nighttime lighting, and we have a rendermode that only shows
caves.
Beyond that, there are also render "overlays" that can be toggled on or off,
overlaying a proper rendering. These can be used to show where minerals are and
such.
Specify your rendermodes with :option:`--rendermodes`. You can get a list of all
rendermodes installed with :option:`--list-rendermodes`.
Options and Rendermode Inheritance
----------------------------------
Each mode will accept its own options, as well as the options for
parent modes; for example the 'night' mode will also accept options
listed for 'lighting' and 'normal'. Also, if you set an option on a
mode, all its children will also have that option set. So, setting the
'edge_opacity' option on 'normal' will also set it on 'lighting' and
'night'.
Basically, each mode inherits available options and set options from
its parent.
Eventually the :option:`--list-rendermodes` option will show parent
relationships. Right now, it looks something like this:
* normal
* lighting
* night
* cave
* overlay
* spawn
* mineral
How to Set Options
------------------
Available options for each mode are listed below, but once you know what to set
you'll have to edit your settings file to set them. Here's an example::
rendermode_options = {
'lighting': {
'edge_opacity': 0.5,
},
'cave': {
'lighting': True,
'depth_tinting': False,
},
}
As you can see, each entry in ``rendermode_options`` starts with the mode name
you want to apply the options to, then a dictionary containing each option. So
in this example, 'lighting' mode has 'edge_opacity' set to 0.5, and 'cave' mode
has 'lighting' turned on and 'depth_tinting' turned off.
Option Listing
--------------
Soon there should be a way to pull out supported options from Overviewer
directly, but for right now, here's a reference of currently supported options.
normal
~~~~~~
* **edge_opacity** - darkness of the edge lines, from 0.0 to 1.0 (default: 0.15)
* **min_depth** - lowest level of blocks to render (default: 0)
* **max_depth** - highest level of blocks to render (default: 127)
* **height_fading** - darken or lighten blocks based on height (default: False)
lighting
~~~~~~~~
all the options available in 'normal', and...
* **shade_strength** - how dark to make the shadows, from 0.0 to 1.0 (default: 1.0)
night
~~~~~
'night' mode has no options of its own, but it inherits options from
'lighting'.
cave
~~~~
all the options available in 'normal', and...
* **depth_tinting** - tint caves based on how deep they are (default: True)
* **only_lit** - only render lit caves (default: False)
* **lighting** - render caves with lighting enabled (default: False)
mineral
~~~~~~~
The mineral overlay supports one option, **minerals**, that has a fairly
complicated format. **minerals** must be a list of ``(blockid, (r, g, b))``
tuples that tell the mineral overlay what blocks to look for. Whenever a block
with that block id is found underground, the surface is colored with the given
color.
See the *settings.py* example below for an example usage of **minerals**.
Defining Custom Rendermodes
---------------------------
Sometimes, you want to render two map layers with the same mode, but with two
different sets of options. For example, you way want to render a cave mode with
depth tinting, and another cave mode with lighting and no depth tinting. In this
case, you will want to define a 'custom' render mode that inherits from 'cave'
and uses the options you want. For example::
custom_rendermodes = {
'cave-lighting': {
'parent': 'cave',
'label': 'Lit Cave',
'description': 'cave mode, with lighting',
'options': {
'depth_tinting': False,
'lighting': True,
}
},
}
rendermode = ['cave', 'cave-lighting']
Each entry in ``custom_rendermodes`` starts with the mode name, and is followed
by a dictionary of mode information, such as the parent mode and description
(for your reference), a label for use on the map, as well as the options to
apply.
Every custom rendermode you define is on exactly equal footing with the built-in
modes: you can put them in the ``rendermode`` list to render them, you can
inherit from them in other custom modes, and you can even add options to them
with ``rendermode_options``, though that's a little redundant.
Example *settings.py*
---------------------
This *settings.py* will render three layers: a normal 'lighting' layer, a 'cave'
layer restricted to between levels 40 and 55 to show off a hypothetical subway
system, and a 'mineral' layer that has been modified to show underground rail
tracks instead of ore.
::
rendermode = ['lighting', 'subway-cave', 'subway-overlay']
custom_rendermodes = {
'subway-cave' : {'parent' : 'cave',
'label' : 'Subway',
'description' : 'a subway map, based on the cave rendermode',
'options' : {
'depth_tinting' : False,
'lighting' : True,
'only_lit' : True,
'min_depth' : 40,
'max_depth' : 55,
}
},
'subway-overlay' : {'parent' : 'mineral',
'label' : 'Subway Overlay',
'description' : 'an overlay showing the location of minecart tracks',
'options' : {'minerals' : [
(27, (255, 234, 0)),
(28, (255, 234, 0)),
(66, (255, 234, 0)),
]}
},
}
rendermode_options = {
'lighting' : {'edge_opacity' : 0.5},
# 'night' : {'shade_strength' : 0.5},
# 'cave' : {'only_lit' : True, 'lighting' : True, 'depth_tinting' : False},
}
.. _web-assets:
Customizing Web Assets
======================
The web assets are the static html files stored in
overviewer_core/data/web_assets that are copied to the destination directory
when you run the Overviewer. Some of these files are actually templates and
certain parameters are set at render time depending on various factors. Others
are just straight up copied.
You should not typically need to edit the files in here, but if you like
customizing things or want to edit them for whatever reason, here's two ways:
1. If you're not afraid of Git and you're running the Overviewer from a Git
clone of our repository, you can edit the files in
overviewer_core/data/web_assets directly. When you pull in changes from us,
you will have to merge, but using Git should make this relatively painless.
2. Otherwise, the recommended way is to use the :option:`--web-assets-path`
option. Use this option and point it to a directory of customized web assets
to copy.
Files from the original web_assets directory are still copied, but any files
in the custom web assets directory will override the originals. This way you
can customize a few files and leave the rest alone.
The downside is, if you want to upgrade you will have to merge in your
changes with any of our changes manually. To avoid merging entirely, just
copy *all* the web assets to your custom web assets folder. You'll keep the
old version of all files for eternity, missing out on new features we may
add, but you won't have to deal with merges at all.

139
docs/running.rst Normal file
View File

@@ -0,0 +1,139 @@
======================
Running the Overviewer
======================
Rendering your First Map
========================
Overviewer is a command-line application, and so it needs to be run from the
command line. If you installed Overviewer from a package manager, the command is
``overviewer.py``. If you downloaded it manually, open a terminal window and
navigate to wherever you downloaded Overviewer. For pre-compiled Windows builds,
the command is ``overviewer.exe``. For other systems, it's ``overviewer.py``.
The basic usage for Windows is::
overviewer.exe [options] <World> <Output Dir>
And similarly for other systems::
overviewer.py [options] <World> <Output Dir>
**World**
World can be one of several things.
1. The path to your Minecraft world on your hard drive
2. The name of a single player world on your current system. Note that if it
has spaces, you will need to put the world name in quotes.
3. If your single-player world name is in the format "World #" (e.g. "World
1"), you can just specify the number.
**Output Dir**
This is the directory you would like to put the rendered tiles and
supporting HTML and javascript files. You should use the same output
directory each time; the Overviewer will automatically re-render only the
tiles that need rendering on subsequent runs.
**options**
See the :doc:`options` page for a list of options you can
specify.
For example, on Windows if your Minecraft server runs out of ``c:\server\`` and you want
to put the rendered map in ``c:\mcmap\``, run this::
overviewer.exe c:\server\world c:\mcmap
For Mac or Linux builds from source, you would run something like this with the
current directory in the top level of the source tree::
./overviewer.py /opt/minecraft/server/world /opt/minecraft/mcmap
The first render can take a while, depending on the size of your world.
When the render is done, open up *index.html* using your web-browser of choice.
Pretty cool, huh? You can even upload this map to a web server to share with
others! Simply upload the entire folder to a web server and point your users to
index.html!
Incremental updates are just as easy, and a lot faster. If you go and change
something inside your world, run the command again and Overviewer will
automatically re-render only what's needed.
.. _installing-textures:
Installing the Textures
=======================
If you're running on a machine without the Minecraft client installed, you will
need to provide the terrain.png file manually for the Overviewer to use in
rendering your world. This is common for servers.
All Overviewer needs is a terrain.png file. If the Minecraft client is
installed, it will use the terrain.png that comes with Minecraft. If the
Minecraft client is not installed or you wish to use a different terrain.png,
for example a custom texture pack, read on.
You have several options:
* If you have the Minecraft client installed, the Overviewer will automatically
use those textures. This is a good solution since the Minecraft Launcher will
always keep this file up-to-date and you don't have to do anything extra.
* If you're running the Overviewer on a server, you can still put the
minecraft.jar file (not the launcher) into the correct location and the
Overviewer will find and use it, even if the rest of the client files are
missing. On Linux, try a command like this::
wget -N http://s3.amazonaws.com/MinecraftDownload/minecraft.jar -P ~/.minecraft/bin/
* You can manually extract the terrain.png from minecraft.jar or your favorite
texture pack. If you've built the Overviewer from source, simply place the
file in the same directory as overviewer.py or overviewer.exe. For
installations, you will need to specify the path... see the next bullet.
* You can put a terrain.png file anywhere you want and point to its location
with the :option:`--textures-path` option. This should point to the directory containing
the terrain.png, not to the file itself.
Note: the :option:`--check-terrain` option is useful for debugging terrain.png issues.
For example::
$ ./overviewer.py --check-terrain
2011-09-26 21:51:46,494 [INFO] Found terrain.png in '/home/achin/.minecraft/bin/minecraft.jar'
2011-09-26 21:51:46,497 [INFO] Hash of terrain.png file is: `6d53f9e59d2ea8c6f574c9a366f3312cd87338a8`
::
$ ./overviewer.py --check-terrain --textures-path=/tmp
2011-09-26 21:52:52,143 [INFO] Found terrain.png in '/tmp/terrain.png'
2011-09-26 21:52:52,145 [INFO] Hash of terrain.png file is: `6d53f9e59d2ea8c6f574c9a366f3312cd87338a8`
Running on a Live Map
=====================
If you're running the Overviewer on a live server or a single player world
that's running, read this section.
Minecraft doesn't really like it when other programs go snooping around in a
live world, so running Overviewer on a live world usually creates a few errors,
usually "corrupt chunk" errors. You *can* do this, but it's not a supported way
of running Overviewer.
To get around this, you can copy your live world somewhere else, and render the
copied world instead. If you're already making backups of your world, you can
use the backups to make the render. Many people even use their backups to run
Overviewer on a different machine than the one running the Minecraft server.
There used to be a few things to be careful about, but right now there's only
one important thing left.
Preserving Modification Times
-----------------------------
The important thing to be careful about when copying world files to another
location is file modification times, which Overviewer uses to figure out what
parts of the map need updating. If you do a straight copy, usually this will
update the modification times on all the copied files, causing Overviewer to
re-render the entire map. To copy files on Unix, while keeping these
modification times intact, use ``cp -p``. For people who render from backups,
GNU ``tar`` automatically handles modification times correctly. ``rsync -a``
will handle this correctly as well. If you use some other tool, you'll have to
figure out how to do this yourself.

View File

@@ -114,8 +114,8 @@ def main():
parser.add_option("--imgformat", dest="imgformat", helptext="The image output format to use. Currently supported: png(default), jpg.", advanced=True )
parser.add_option("--imgquality", dest="imgquality", default=95, helptext="Specify the quality of image output when using imgformat=\"jpg\".", type="int", advanced=True)
parser.add_option("--bg-color", dest="bg_color", helptext="Configures the background color for the GoogleMap output. Specify in #RRGGBB format", advanced=True, type="string", default="#1A1A1A")
parser.add_option("--optimize-img", dest="optimizeimg", helptext="If using png, perform image file size optimizations on the output. Specify 1 for pngcrush, 2 for pngcrush+advdef and 3 for pngcrush-advdef with more agressive settings. This may double (or more) render times, but will produce up to 30% smaller images. NOTE: requires corresponding programs in $PATH or %PATH%", advanced=True)
parser.add_option("--web-assets-hook", dest="web_assets_hook", helptext="If provided, run this function after the web assets have been copied, but before actual tile rendering begins. It should accept a QuadtreeGen object as its only argument.", action="store", metavar="SCRIPT", type="function", advanced=True)
parser.add_option("--optimize-img", dest="optimizeimg", helptext="If using png, perform image file size optimizations on the output. Specify 1 for pngcrush, 2 for pngcrush+advdef and 3 for pngcrush-advdef with more aggressive settings. This may double (or more) render times, but will produce up to 30% smaller images. NOTE: requires corresponding programs in $PATH or %PATH%", advanced=True)
parser.add_option("--web-assets-hook", dest="web_assets_hook", helptext="If provided, run this function after the web assets have been copied, but before actual tile rendering begins. It should accept a MapGen object as its only argument.", action="store", metavar="FUNCTION", type="function", advanced=True)
parser.add_option("--web-assets-path", dest="web_assets_path", helptext="Specifies a non-standard web_assets directory to use. Files here will overwrite the default web assets.", metavar="PATH", type="string", advanced=True)
parser.add_option("--textures-path", dest="textures_path", helptext="Specifies a non-standard textures path, from which terrain.png and other textures are loaded.", metavar="PATH", type="string", advanced=True)
parser.add_option("--check-terrain", dest="check_terrain", helptext="Prints the location and hash of terrain.png, useful for debugging terrain.png problems", action="store_true", advanced=False, commandLineOnly=True)
@@ -124,7 +124,7 @@ def main():
parser.add_option("--skip-js", dest="skipjs", action="store_true", helptext="Don't output marker.js or regions.js")
parser.add_option("--no-signs", dest="nosigns", action="store_true", helptext="Don't output signs to markers.js")
parser.add_option("--north-direction", dest="north_direction", action="store", helptext="Specifies which corner of the screen north will point to. Defaults to whatever the current map uses, or lower-left for new maps. Valid options are: " + ", ".join(avail_north_dirs) + ".", type="choice", default="auto", choices=avail_north_dirs)
parser.add_option("--changelist", dest="changelist", action="store", helptext="Output list of changed tiles to file. If the file exists, it's contents will be overwritten.",advanced=True)
parser.add_option("--changelist", dest="changelist", action="store", helptext="Output list of changed tiles to file. If the file exists, its contents will be overwritten.",advanced=True)
parser.add_option("--changelist-format", dest="changelist_format", action="store", helptext="Output relative or absolute paths for --changelist. Only valid when --changelist is used", type="choice", default="auto", choices=["auto", "relative","absolute"],advanced=True)
parser.add_option("--display-config", dest="display_config", action="store_true", helptext="Display the configuration parameters, but don't render the map. Requires all required options to be specified", commandLineOnly=True)
#parser.add_option("--write-config", dest="write_config", action="store_true", helptext="Writes out a sample config file", commandLineOnly=True)

View File

@@ -143,8 +143,8 @@ solid_blocks = set([1, 2, 3, 4, 5, 7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22
fluid_blocks = set([8,9,10,11])
# This set holds block ids that are not candidates for spawning mobs on
# (glass, half blocks, fluids)
nospawn_blocks = set([20,44]).union(fluid_blocks)
# (glass, slabs, stairs, fluids, ice, pistons, webs,TNT, wheat, cactus, iron bars, glass planes, fences, fence gate, cake, bed, repeaters, trapdoor)
nospawn_blocks = set([20,26, 29, 30, 33, 34, 44, 46, 53, 59, 67, 79, 81, 85, 92, 93, 94, 96, 107, 109, 101, 102]).union(fluid_blocks)
class ChunkCorrupt(Exception):
pass

View File

@@ -111,7 +111,7 @@ body {
border: 2px solid #000;
font-size: 12pt;
width: 20em;
background-colour: #fff;
background-color: #fff;
}
#searchControl>input.inactive {

View File

@@ -708,7 +708,7 @@ var overviewer = {
// only create drop down if there's used options
if (items.length > 0) {
overviewer.util.createDropDown('Signposts', items);
overviewer.util.createDropDown('Markers', items);
}
}

View File

@@ -1,11 +1,14 @@
var overviewerConfig = {
/**
* These are things that will probably not need to be changed by the user,
* but are there because otherwise changing them is a giant PITA.
* These are things that will probably not need to be changed, but are there
* because otherwise changing them is a giant PITA. If you, the user, sees
* that its crucial for you to change these settings then the document
* repository might be able to assist you.
* http://docs.overviewer.org/en/latest/options/#customizing-web-assets
*/
'CONST': {
/**
* Height and width of the tiles in pixels (I think).
* Height and width of the tiles in pixels.
*/
'tileSize': 384,
/**
@@ -88,6 +91,11 @@ var overviewerConfig = {
'center': {spawn_coords},
/**
* Set this to tell browsers how long they should cache tiles in minutes.
* Essentially if set to 0, the url for tiles will end in .png
* if not set to 0 it will amend a number derived from the current time
* to the end of the url, like .png?c=123456. This is a great method for
* preventing browsers from caching the images. 0 saves bandwidth, not 0
* prevents caching.
*/
'cacheMinutes': 0,
/**

View File

@@ -80,7 +80,7 @@ class QuadtreeGen(object):
if depth is None:
# Determine quadtree depth (midpoint is always 0,0)
for p in xrange(15):
for p in xrange(64):
# Will 2^p tiles wide and high suffice?
# X has twice as many chunks as tiles, then halved since this is a
@@ -92,10 +92,12 @@ class QuadtreeGen(object):
if xradius >= worldobj.maxcol and -xradius <= worldobj.mincol and \
yradius >= worldobj.maxrow and -yradius <= worldobj.minrow:
break
else:
raise ValueError("Your map is waaaay too big! Use the 'zoom' option in 'settings.py'.")
if p < 15:
self.p = p
else:
raise ValueError("Your map is waaaay too big! Use the 'zoom' option in 'settings.py'. Overviewer is estimating %i zoom levels, but you probably want less." % (p,))
else:
self.p = depth
xradius = 2**depth

View File

@@ -108,15 +108,16 @@ class RenderNode(object):
raise ValueError("there must be at least one quadtree to work on")
self.options = options
# A list of quadtree.QuadTree objects representing each rendermode
# requested
self.quadtrees = quadtrees
#List of changed tiles
self.rendered_tiles = []
#bind an index value to the quadtree so we can find it again
#and figure out which worlds are where
i = 0
self.worlds = []
for q in quadtrees:
for i, q in enumerate(quadtrees):
q._render_index = i
i += 1
if q.world not in self.worlds:
@@ -163,10 +164,13 @@ class RenderNode(object):
else:
pool.map_async(bool,xrange(multiprocessing.cpu_count()),1)
# 1 quadtree object per rendermode requested
quadtrees = self.quadtrees
# do per-quadtree init
# Determine the total number of tiles by adding up the number of tiles
# from each quadtree. Also find the max zoom level (max_p). Even though
# each quadtree will always have the same zoom level, this bit of code
# does not make that assumption.
max_p = 0
total = 0
for q in quadtrees:
@@ -174,7 +178,9 @@ class RenderNode(object):
if q.p > max_p:
max_p = q.p
self.max_p = max_p
# Render the highest level of tiles from the chunks
# The next sections of code render the highest zoom level of tiles. The
# section after render the other levels.
results = collections.deque()
complete = 0
logging.info("Rendering highest zoom level of tiles now.")
@@ -247,7 +253,8 @@ class RenderNode(object):
self.print_statusline(complete, total, 1, True)
# Now do the other layers
# The highest zoom level has been rendered.
# Now do the lower zoom levels
for zoom in xrange(self.max_p-1, 0, -1):
level = self.max_p - zoom + 1
assert len(results) == 0
@@ -341,6 +348,7 @@ class RenderNode(object):
@catch_keyboardinterrupt
def render_worldtile_batch(batch):
# batch is a list. Each item is [quadtree_id, colstart, colend, rowstart, rowend, tilepath]
global child_rendernode
rendernode = child_rendernode
count = 0

View File

@@ -35,7 +35,7 @@ def _find_file(filename, mode="rb", verbose=False):
* the textures_path given in the config file (if present)
* The program dir (same dir as overviewer.py)
* The overviewer_core textures dir
* The overviewer_core/data/textures dir
* On Darwin, in /Applications/Minecraft
* Inside minecraft.jar, which is looked for at these locations
@@ -303,9 +303,9 @@ def _build_block(top, side, blockID=None):
composite.alpha_over(img, otherside, (12,6), otherside)
composite.alpha_over(img, top, (0,9), top)
else:
composite.alpha_over(img, top, (0,0), top)
composite.alpha_over(img, side, (0,6), side)
composite.alpha_over(img, otherside, (12,6), otherside)
composite.alpha_over(img, top, (0,0), top)
# Manually touch up 6 pixels that leave a gap because of how the
# shearing works out. This makes the blocks perfectly tessellate-able

View File

@@ -111,7 +111,7 @@ if imgformat != "jpg":
################################################################################
### web_assets_hook
## If provided, run this function after the web assets have been copied, but
## before actual tile rendering beings. It should accept a QuadtreeGen
## before actual tile rendering beings. It should accept a MapGen
## object as its only argument. Note: this is only called if skipjs is True
## Default: not yet
## Type: function

View File

@@ -105,7 +105,7 @@ if py2exe is not None:
b = 3
else:
b = 1
setup_kwargs['options']['py2exe'] = {'bundle_files' : b, 'excludes': 'Tkinter'}
setup_kwargs['options']['py2exe'] = {'bundle_files' : b, 'excludes': 'Tkinter', 'includes':['fileinput', 'overviewer_core.items']}
#
# py2app options