Merge branch 'expr-v2' of github.com:mapnik/mapnik into jmh-text-layouts
Conflicts: tests/visual_tests/test.py
4
Makefile
|
@ -14,10 +14,10 @@ endif
|
|||
all: mapnik
|
||||
|
||||
install:
|
||||
@python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 install
|
||||
python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 install
|
||||
|
||||
mapnik:
|
||||
@python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1
|
||||
python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1
|
||||
|
||||
clean:
|
||||
@python scons/scons.py -j$(JOBS) -c --config=cache --implicit-cache --max-drift=1
|
||||
|
|
|
@ -767,16 +767,20 @@ def FindBoost(context, prefixes, thread_flag):
|
|||
if BOOST_LIB_DIR:
|
||||
msg += '\nFound boost libs: %s' % BOOST_LIB_DIR
|
||||
env['BOOST_LIBS'] = BOOST_LIB_DIR
|
||||
else:
|
||||
elif not env['BOOST_LIBS']:
|
||||
env['BOOST_LIBS'] = '/usr/' + env['LIBDIR_SCHEMA']
|
||||
msg += '\nUsing default boost lib dir: %s' % env['BOOST_LIBS']
|
||||
else:
|
||||
msg += '\nUsing boost lib dir: %s' % env['BOOST_LIBS']
|
||||
|
||||
if BOOST_INCLUDE_DIR:
|
||||
msg += '\nFound boost headers: %s' % BOOST_INCLUDE_DIR
|
||||
env['BOOST_INCLUDES'] = BOOST_INCLUDE_DIR
|
||||
else:
|
||||
elif not env['BOOST_INCLUDES']:
|
||||
env['BOOST_INCLUDES'] = '/usr/include'
|
||||
msg += '\nUsing default boost include dir: %s' % env['BOOST_INCLUDES']
|
||||
else:
|
||||
msg += '\nUsing boost include dir: %s' % env['BOOST_INCLUDES']
|
||||
|
||||
if not env['BOOST_TOOLKIT'] and not env['BOOST_ABI'] and not env['BOOST_VERSION']:
|
||||
if BOOST_APPEND:
|
||||
|
|
|
@ -10,6 +10,7 @@ function run {
|
|||
${BASE}/$1 --threads $2 --iterations $(expr $3 / $2);
|
||||
}
|
||||
|
||||
run test_array_allocation 20 100000
|
||||
run test_png_encoding1 10 1000
|
||||
run test_png_encoding2 10 50
|
||||
run test_to_string1 10 100000
|
||||
|
|
310
benchmark/test_array_allocation.cpp
Normal file
|
@ -0,0 +1,310 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <cstring>
|
||||
#include <cstdlib>
|
||||
#include <stdexcept>
|
||||
#include <array>
|
||||
#include <valarray>
|
||||
|
||||
// http://stackoverflow.com/questions/17347254/why-is-allocation-and-deallocation-of-stdvector-slower-than-dynamic-array-on-m
|
||||
|
||||
#define FULL_ZERO_CHECK
|
||||
|
||||
inline void ensure_zero(uint8_t * data, uint32_t size) {
|
||||
#ifdef FULL_ZERO_CHECK
|
||||
for (std::size_t i=0;i<size;++i) {
|
||||
if (data[i] != 0) {
|
||||
throw std::runtime_error("found non zero value");
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (data[0] != 0) {
|
||||
throw std::runtime_error("found non zero value");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
class test1 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test1(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
// NOTE: sizeof(uint8_t) == 1
|
||||
uint8_t *data = (uint8_t *)malloc(sizeof(uint8_t)*size_);
|
||||
memcpy(data, &array_[0], size_);
|
||||
ensure_zero(data,size_);
|
||||
free(data);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class test1b : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test1b(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
// NOTE: sizeof(uint8_t) == 1
|
||||
uint8_t *data = (uint8_t *)malloc(sizeof(uint8_t)*size_);
|
||||
memset(data, 0, sizeof(uint8_t)*size_);
|
||||
ensure_zero(data,size_);
|
||||
free(data);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class test2 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test2(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
uint8_t * data = static_cast<uint8_t*>(::operator new(sizeof(uint8_t)*size_));
|
||||
memcpy(data, &array_[0], size_);
|
||||
ensure_zero(data,size_);
|
||||
::operator delete(data),data=0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class test3 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test3(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
std::vector<uint8_t> data(size_);
|
||||
ensure_zero(&data[0],data.size());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class test3b : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test3b(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
std::vector<uint8_t> data(0);
|
||||
data.resize(size_,0);
|
||||
ensure_zero(&data[0],data.size());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class test3c : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test3c(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
std::vector<uint8_t> data(0);
|
||||
data.assign(size_,0);
|
||||
ensure_zero(&data[0],data.size());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class test4 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test4(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
uint8_t *data = (uint8_t *)calloc(size_,sizeof(uint8_t));
|
||||
ensure_zero(data,size_);
|
||||
free(data);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class test5 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test5(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
std::string data(array_.begin(),array_.end());
|
||||
ensure_zero((uint8_t *)&data[0],size_);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class test5b : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<char> array_;
|
||||
test5b(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
std::string data(&array_[0]);
|
||||
ensure_zero((uint8_t *)&data[0],size_);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// C++14 dynarray<T>
|
||||
// http://isocpp.org/blog/2013/04/trip-report-iso-c-spring-2013-meeting
|
||||
// http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20130909/088700.html
|
||||
// http://stackoverflow.com/questions/17303902/any-alternative-to-stddynarray-presently-available
|
||||
|
||||
class test6 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test6(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
std::valarray<uint8_t> data(size_,0);
|
||||
ensure_zero(&data[0],size_);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc,argv,params);
|
||||
{
|
||||
test4 test_runner4(params);
|
||||
run(test_runner4,"calloc");
|
||||
}
|
||||
{
|
||||
test1 test_runner(params);
|
||||
run(test_runner,"malloc/memcpy");
|
||||
}
|
||||
{
|
||||
test1b test_runner(params);
|
||||
run(test_runner,"malloc/memset");
|
||||
|
||||
}
|
||||
{
|
||||
test2 test_runner(params);
|
||||
run(test_runner,"new");
|
||||
}
|
||||
{
|
||||
test3 test_runner(params);
|
||||
run(test_runner,"vector(N)");
|
||||
}
|
||||
{
|
||||
test3b test_runner(params);
|
||||
run(test_runner,"vector/resize");
|
||||
}
|
||||
{
|
||||
test3c test_runner(params);
|
||||
run(test_runner,"vector/assign");
|
||||
}
|
||||
{
|
||||
test5 test_runner(params);
|
||||
run(test_runner,"std::string range");
|
||||
}
|
||||
{
|
||||
test5 test_runner(params);
|
||||
run(test_runner,"std::string &[0]");
|
||||
}
|
||||
{
|
||||
test5 test_runner(params);
|
||||
run(test_runner,"valarray");
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -104,11 +104,7 @@ struct alpha_conv_impl
|
|||
|
||||
struct hsl_conv_impl
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template<typename T>
|
||||
#else
|
||||
template<typename T0,typename T1, typename T2, typename T3>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
|
||||
// stl
|
||||
#include <map>
|
||||
#include <set>
|
||||
|
||||
namespace mapnik {
|
||||
|
||||
|
@ -56,7 +57,7 @@ private:
|
|||
~datasource_cache();
|
||||
std::map<std::string,std::shared_ptr<PluginInfo> > plugins_;
|
||||
bool registered_;
|
||||
std::vector<std::string> plugin_directories_;
|
||||
std::set<std::string> plugin_directories_;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -65,11 +65,7 @@ struct unicode_impl
|
|||
|
||||
struct regex_match_impl
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T>
|
||||
#else
|
||||
template <typename T0, typename T1>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef expr_node type;
|
||||
|
@ -87,11 +83,7 @@ struct regex_match_impl
|
|||
struct regex_replace_impl
|
||||
{
|
||||
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T>
|
||||
#else
|
||||
template <typename T0, typename T1, typename T2>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef expr_node type;
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
|
||||
// stl
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <set>
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
|
@ -68,7 +69,7 @@ class hextree : private mapnik::noncopyable
|
|||
pixel_count(0),
|
||||
children_count(0)
|
||||
{
|
||||
memset(&children_[0],0,sizeof(children_));
|
||||
std::memset(&children_[0],0,sizeof(children_));
|
||||
}
|
||||
|
||||
~node ()
|
||||
|
|
|
@ -29,9 +29,6 @@
|
|||
#include <mapnik/noncopyable.hpp>
|
||||
#include <mapnik/unicode.hpp>
|
||||
|
||||
// boost
|
||||
|
||||
|
||||
// stl
|
||||
#include <vector>
|
||||
|
||||
|
|
|
@ -67,7 +67,6 @@ public:
|
|||
mapnik::transcoder const& tr_;
|
||||
};
|
||||
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
struct put_property
|
||||
{
|
||||
typedef void result_type;
|
||||
|
@ -90,42 +89,6 @@ struct extract_geometry
|
|||
return feature.paths();
|
||||
}
|
||||
};
|
||||
#else
|
||||
struct put_property
|
||||
{
|
||||
template <typename T0,typename T1, typename T2>
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
};
|
||||
explicit put_property(mapnik::transcoder const& tr)
|
||||
: tr_(tr) {}
|
||||
|
||||
template <typename T0,typename T1, typename T2>
|
||||
void operator() (T0 & feature, T1 const& key, T2 const& val) const
|
||||
{
|
||||
mapnik::value v = boost::apply_visitor(attribute_value_visitor(tr_),val); // TODO: optimize
|
||||
feature.put_new(key, v);
|
||||
}
|
||||
|
||||
mapnik::transcoder const& tr_;
|
||||
};
|
||||
|
||||
struct extract_geometry
|
||||
{
|
||||
template <typename T>
|
||||
struct result
|
||||
{
|
||||
typedef boost::ptr_vector<mapnik::geometry_type>& type;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
boost::ptr_vector<mapnik::geometry_type>& operator() (T & feature) const
|
||||
{
|
||||
return feature.paths();
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
template <typename Iterator, typename FeatureType>
|
||||
struct feature_grammar :
|
||||
|
|
|
@ -58,7 +58,6 @@ namespace phoenix = boost::phoenix;
|
|||
|
||||
namespace {
|
||||
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
struct get_type
|
||||
{
|
||||
typedef int result_type;
|
||||
|
@ -117,81 +116,6 @@ struct not_empty
|
|||
}
|
||||
};
|
||||
|
||||
#else
|
||||
struct get_type
|
||||
{
|
||||
template <typename T>
|
||||
struct result { typedef int type; };
|
||||
|
||||
int operator() (geometry_type const& geom) const
|
||||
{
|
||||
return static_cast<int>(geom.type());
|
||||
}
|
||||
};
|
||||
|
||||
struct get_first
|
||||
{
|
||||
template <typename T>
|
||||
struct result { typedef geometry_type::value_type const type; };
|
||||
|
||||
geometry_type::value_type const operator() (geometry_type const& geom) const
|
||||
{
|
||||
geometry_type::value_type coord;
|
||||
std::get<0>(coord) = geom.vertex(0,&std::get<1>(coord),&std::get<2>(coord));
|
||||
return coord;
|
||||
}
|
||||
};
|
||||
|
||||
struct multi_geometry_type
|
||||
{
|
||||
template <typename T>
|
||||
struct result { typedef std::tuple<unsigned,bool> type; };
|
||||
|
||||
std::tuple<unsigned,bool> operator() (geometry_container const& geom) const
|
||||
{
|
||||
unsigned type = 0u;
|
||||
bool collection = false;
|
||||
|
||||
geometry_container::const_iterator itr = geom.begin();
|
||||
geometry_container::const_iterator end = geom.end();
|
||||
|
||||
for ( ; itr != end; ++itr)
|
||||
{
|
||||
if (type != 0u && static_cast<unsigned>(itr->type()) != type)
|
||||
{
|
||||
collection = true;
|
||||
break;
|
||||
}
|
||||
type = itr->type();
|
||||
}
|
||||
if (geom.size() > 1) type +=3;
|
||||
return std::tuple<unsigned,bool>(type, collection);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct not_empty
|
||||
{
|
||||
template <typename T>
|
||||
struct result { typedef bool type; };
|
||||
|
||||
bool operator() (geometry_container const& cont) const
|
||||
{
|
||||
geometry_container::const_iterator itr = cont.begin();
|
||||
geometry_container::const_iterator end = cont.end();
|
||||
|
||||
for (; itr!=end; ++itr)
|
||||
{
|
||||
if (itr->size() > 0) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
template <typename T>
|
||||
struct json_coordinate_policy : karma::real_policies<T>
|
||||
{
|
||||
|
|
|
@ -37,7 +37,6 @@ namespace qi = boost::spirit::qi;
|
|||
namespace standard_wide = boost::spirit::standard_wide;
|
||||
using standard_wide::space_type;
|
||||
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
struct push_vertex
|
||||
{
|
||||
typedef void result_type;
|
||||
|
@ -88,76 +87,6 @@ struct where_message
|
|||
return str;
|
||||
}
|
||||
};
|
||||
#else
|
||||
struct push_vertex
|
||||
{
|
||||
template <typename T0,typename T1, typename T2, typename T3>
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
};
|
||||
|
||||
template <typename T0,typename T1, typename T2, typename T3>
|
||||
void operator() (T0 c, T1 path, T2 x, T3 y) const
|
||||
{
|
||||
BOOST_ASSERT( path!=0 );
|
||||
path->push_vertex(x,y,c);
|
||||
}
|
||||
};
|
||||
|
||||
struct close_path
|
||||
{
|
||||
template <typename T>
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
void operator() (T path) const
|
||||
{
|
||||
BOOST_ASSERT( path!=0 );
|
||||
if (path->size() > 2u) // to form a polygon ring we need at least 3 vertices
|
||||
{
|
||||
path->close_path();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct cleanup
|
||||
{
|
||||
template <typename T0>
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
};
|
||||
|
||||
template <typename T0>
|
||||
void operator() (T0 & path) const
|
||||
{
|
||||
if (path) delete path, path=0;
|
||||
}
|
||||
};
|
||||
|
||||
struct where_message
|
||||
{
|
||||
template <typename T0,typename T1,typename T2>
|
||||
struct result
|
||||
{
|
||||
typedef std::string type;
|
||||
};
|
||||
|
||||
template <typename Iterator>
|
||||
std::string operator() (Iterator first, Iterator last, std::size_t size) const
|
||||
{
|
||||
std::string str(first, last);
|
||||
if (str.length() > size)
|
||||
return str.substr(0, size) + "..." ;
|
||||
return str;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
template <typename Iterator>
|
||||
struct geometry_grammar :
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
#define MAPNIK_SYMBOLIZER_GRAMMAR_HPP
|
||||
|
||||
// boost
|
||||
#define BOOST_SPIRIT_USE_PHOENIX_V3 1
|
||||
#include <boost/spirit/include/qi.hpp>
|
||||
#include <boost/spirit/include/phoenix.hpp>
|
||||
|
||||
|
|
|
@ -23,13 +23,15 @@
|
|||
#ifndef MAPNIK_TOPOJSON_GRAMMAR_HPP
|
||||
#define MAPNIK_TOPOJSON_GRAMMAR_HPP
|
||||
|
||||
#define BOOST_SPIRIT_USE_PHOENIX_V3 1
|
||||
#include <boost/spirit/include/qi.hpp>
|
||||
#include <boost/spirit/include/phoenix.hpp>
|
||||
//
|
||||
// mapnik
|
||||
#include <mapnik/value.hpp>
|
||||
#include <mapnik/json/topology.hpp>
|
||||
//
|
||||
|
||||
// boost
|
||||
#include <boost/spirit/include/qi.hpp>
|
||||
#include <boost/spirit/include/phoenix.hpp>
|
||||
|
||||
// stl
|
||||
#include <string>
|
||||
|
||||
namespace mapnik { namespace topojson {
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
// stl
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <deque>
|
||||
#include <algorithm>
|
||||
|
||||
|
@ -62,7 +63,7 @@ class octree : private mapnik::noncopyable
|
|||
children_count(0),
|
||||
index(0)
|
||||
{
|
||||
memset(&children_[0],0,sizeof(children_));
|
||||
std::memset(&children_[0],0,sizeof(children_));
|
||||
}
|
||||
|
||||
~node()
|
||||
|
|
|
@ -46,11 +46,7 @@ template <typename PathType>
|
|||
struct move_to
|
||||
{
|
||||
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -71,11 +67,7 @@ struct move_to
|
|||
template <typename PathType>
|
||||
struct hline_to
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -97,11 +89,7 @@ struct hline_to
|
|||
template <typename PathType>
|
||||
struct vline_to
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -122,11 +110,7 @@ struct vline_to
|
|||
template <typename PathType>
|
||||
struct line_to
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -148,11 +132,7 @@ struct line_to
|
|||
template <typename PathType>
|
||||
struct curve4
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1, typename T2, typename T3>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -177,11 +157,7 @@ struct curve4
|
|||
template <typename PathType>
|
||||
struct curve4_smooth
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1, typename T2>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -203,11 +179,7 @@ struct curve4_smooth
|
|||
template <typename PathType>
|
||||
struct curve3
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1, typename T2>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -230,11 +202,7 @@ struct curve3
|
|||
template <typename PathType>
|
||||
struct curve3_smooth
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -256,11 +224,7 @@ struct curve3_smooth
|
|||
template <typename PathType>
|
||||
struct arc_to
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
|
|
@ -50,11 +50,7 @@ namespace mapnik { namespace svg {
|
|||
template <typename TransformType>
|
||||
struct process_matrix
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -74,11 +70,7 @@ namespace mapnik { namespace svg {
|
|||
template <typename TransformType>
|
||||
struct process_rotate
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1, typename T2>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -109,11 +101,7 @@ namespace mapnik { namespace svg {
|
|||
template <typename TransformType>
|
||||
struct process_translate
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -135,11 +123,7 @@ namespace mapnik { namespace svg {
|
|||
template <typename TransformType>
|
||||
struct process_scale
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -162,11 +146,7 @@ namespace mapnik { namespace svg {
|
|||
template <typename TransformType>
|
||||
struct process_skew
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T0>
|
||||
#else
|
||||
template <typename T0, typename T1>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
|
|
@ -131,6 +131,8 @@ public:
|
|||
/** Go back to initial state. */
|
||||
void reset();
|
||||
|
||||
/** position on this line closest to the target position */
|
||||
double position_closest_to(pixel_position const &target_pos);
|
||||
|
||||
private:
|
||||
void rewind_subpath();
|
||||
|
|
|
@ -91,7 +91,6 @@ namespace mapnik { namespace util {
|
|||
|
||||
namespace svg_detail {
|
||||
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename Geometry>
|
||||
struct get_type
|
||||
{
|
||||
|
@ -115,37 +114,7 @@ namespace mapnik { namespace util {
|
|||
return coord;
|
||||
}
|
||||
};
|
||||
#else
|
||||
template <typename Geometry>
|
||||
struct get_type
|
||||
{
|
||||
template <typename T>
|
||||
struct result { typedef int type; };
|
||||
|
||||
int operator() (Geometry const& geom) const
|
||||
{
|
||||
return static_cast<int>(geom.type());
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct get_first
|
||||
{
|
||||
typedef T geometry_type;
|
||||
|
||||
template <typename U>
|
||||
struct result { typedef typename geometry_type::value_type const type; };
|
||||
|
||||
typename geometry_type::value_type operator() (geometry_type const& geom) const
|
||||
{
|
||||
typename geometry_type::value_type coord;
|
||||
geom.rewind(0);
|
||||
std::get<0>(coord) = geom.vertex(&std::get<1>(coord),&std::get<2>(coord));
|
||||
return coord;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
template <typename T>
|
||||
struct coordinate_policy : karma::real_policies<T>
|
||||
{
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
#include <mapnik/simplify_converter.hpp>
|
||||
#include <mapnik/noncopyable.hpp>
|
||||
#include <mapnik/polygon_clipper.hpp>
|
||||
#include <mapnik/value_types.hpp>
|
||||
|
||||
// agg
|
||||
#include "agg_conv_clip_polygon.h"
|
||||
|
@ -97,7 +98,7 @@ struct converter_traits<T,mapnik::smooth_tag>
|
|||
static void setup(geometry_type & geom, Args const& args)
|
||||
{
|
||||
typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
|
||||
geom.smooth_value(get<double>(sym, keys::smooth));
|
||||
geom.smooth_value(get<value_double>(sym, keys::smooth));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -111,8 +112,8 @@ struct converter_traits<T,mapnik::simplify_tag>
|
|||
static void setup(geometry_type & geom, Args const& args)
|
||||
{
|
||||
typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
|
||||
geom.set_simplify_algorithm(static_cast<simplify_algorithm_e>(get<int>(sym,keys::simplify_algorithm)));
|
||||
geom.set_simplify_tolerance(get<double>(sym, keys::simplify_tolerance));
|
||||
geom.set_simplify_algorithm(static_cast<simplify_algorithm_e>(get<value_integer>(sym,keys::simplify_algorithm)));
|
||||
geom.set_simplify_tolerance(get<value_double>(sym, keys::simplify_tolerance));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -165,8 +166,8 @@ struct converter_traits<T, mapnik::stroke_tag>
|
|||
{
|
||||
typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
|
||||
set_join_caps(sym, geom);
|
||||
double miterlimit = get<double>(sym, keys::stroke_miterlimit, 4.0);
|
||||
double width = get<double>(sym, keys::stroke_width, 1.0);
|
||||
double miterlimit = get<value_double>(sym, keys::stroke_miterlimit, 4.0);
|
||||
double width = get<value_double>(sym, keys::stroke_width, 1.0);
|
||||
geom.generator().miter_limit(miterlimit);
|
||||
double scale_factor = boost::fusion::at_c<6>(args);
|
||||
geom.generator().width(width * scale_factor);
|
||||
|
@ -244,7 +245,7 @@ struct converter_traits<T,mapnik::offset_transform_tag>
|
|||
static void setup(geometry_type & geom, Args const& args)
|
||||
{
|
||||
typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
|
||||
double offset = get<double>(sym, keys::offset);
|
||||
double offset = get<value_double>(sym, keys::offset);
|
||||
double scale_factor = boost::fusion::at_c<6>(args);
|
||||
geom.set_offset(offset * scale_factor);
|
||||
}
|
||||
|
@ -389,7 +390,6 @@ struct vertex_converter : private mapnik::noncopyable
|
|||
disp_.vec_[index]=0;
|
||||
}
|
||||
|
||||
|
||||
detail::dispatcher<args_type,conv_types> disp_;
|
||||
};
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#define MAPNIK_WEBP_IO_HPP
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/image_data.hpp>
|
||||
#include <mapnik/util/conversions.hpp>
|
||||
|
||||
// webp
|
||||
|
|
|
@ -44,11 +44,7 @@ namespace mapnik { namespace wkt {
|
|||
|
||||
struct push_vertex
|
||||
{
|
||||
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
|
||||
template <typename T>
|
||||
#else
|
||||
template <typename T0,typename T1, typename T2, typename T3>
|
||||
#endif
|
||||
struct result
|
||||
{
|
||||
typedef void type;
|
||||
|
@ -233,7 +229,6 @@ struct wkt_collection_grammar : qi::grammar<Iterator, boost::ptr_vector<mapnik::
|
|||
{
|
||||
qi::lit_type lit;
|
||||
qi::no_case_type no_case;
|
||||
using boost::phoenix::push_back;
|
||||
start = wkt | no_case[lit("GEOMETRYCOLLECTION")]
|
||||
>> (lit("(") >> wkt % lit(",") >> lit(")"));
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ ogr_featureset::ogr_featureset(mapnik::context_ptr const& ctx,
|
|||
layer_(layer),
|
||||
layerdef_(layer.GetLayerDefn()),
|
||||
tr_(new transcoder(encoding)),
|
||||
fidcolumn_(layer_.GetFIDColumn()),
|
||||
fidcolumn_(layer_.GetFIDColumn()), // TODO - unused
|
||||
count_(0)
|
||||
{
|
||||
layer_.SetSpatialFilterRect (extent.minx(),
|
||||
|
@ -83,6 +83,13 @@ ogr_featureset::~ogr_featureset()
|
|||
|
||||
feature_ptr ogr_featureset::next()
|
||||
{
|
||||
if (count_ == 0)
|
||||
{
|
||||
// Reset the layer reading on the first feature read
|
||||
// this is a hack, but needed due to https://github.com/mapnik/mapnik/issues/2048
|
||||
// Proper solution is to avoid storing layer state in featureset
|
||||
layer_.ResetReading();
|
||||
}
|
||||
OGRFeature *poFeature;
|
||||
while ((poFeature = layer_.GetNextFeature()) != nullptr)
|
||||
{
|
||||
|
|
|
@ -31,8 +31,7 @@
|
|||
#include <mapnik/feature.hpp>
|
||||
#include <mapnik/feature_factory.hpp>
|
||||
|
||||
// boost
|
||||
|
||||
#include <cstring>
|
||||
|
||||
using mapnik::coord2d;
|
||||
using mapnik::box2d;
|
||||
|
@ -122,7 +121,7 @@ feature_ptr rasterlite_featureset::get_feature(mapnik::query const& q)
|
|||
unsigned char* raster_data = static_cast<unsigned char*>(raster);
|
||||
unsigned char* image_data = image.getBytes();
|
||||
|
||||
memcpy (image_data, raster_data, size);
|
||||
std::memcpy(image_data, raster_data, size);
|
||||
|
||||
feature->set_raster(rasterp);
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
|
||||
// stl
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <stdexcept>
|
||||
|
||||
dbf_file::dbf_file()
|
||||
|
@ -223,7 +224,7 @@ void dbf_file::read_header()
|
|||
skip(22);
|
||||
std::streampos offset=0;
|
||||
char name[11];
|
||||
memset(&name,0,11);
|
||||
std::memset(&name,0,11);
|
||||
fields_.reserve(num_fields_);
|
||||
for (int i=0;i<num_fields_;++i)
|
||||
{
|
||||
|
|
|
@ -165,8 +165,7 @@ void datasource_cache::register_datasources(std::string const& str)
|
|||
#ifdef MAPNIK_THREADSAFE
|
||||
mapnik::scoped_lock lock(mutex_);
|
||||
#endif
|
||||
// TODO - only push unique paths
|
||||
plugin_directories_.push_back(str);
|
||||
plugin_directories_.insert(str);
|
||||
if (mapnik::util::exists(str) && mapnik::util::is_directory(str))
|
||||
{
|
||||
boost::filesystem::directory_iterator end_itr;
|
||||
|
@ -194,9 +193,15 @@ void datasource_cache::register_datasources(std::string const& str)
|
|||
|
||||
bool datasource_cache::register_datasource(std::string const& filename)
|
||||
{
|
||||
bool success = false;
|
||||
try
|
||||
{
|
||||
if (!mapnik::util::exists(filename))
|
||||
{
|
||||
MAPNIK_LOG_ERROR(datasource_cache)
|
||||
<< "Cannot load '"
|
||||
<< filename << "' (plugin does not exist)";
|
||||
return false;
|
||||
}
|
||||
std::shared_ptr<PluginInfo> plugin = std::make_shared<PluginInfo>(filename,"datasource_name");
|
||||
if (plugin->valid())
|
||||
{
|
||||
|
@ -208,11 +213,13 @@ bool datasource_cache::register_datasource(std::string const& filename)
|
|||
}
|
||||
else
|
||||
{
|
||||
plugins_.insert(std::make_pair(plugin->name(),plugin));
|
||||
MAPNIK_LOG_DEBUG(datasource_cache)
|
||||
if (plugins_.insert(std::make_pair(plugin->name(),plugin)).second)
|
||||
{
|
||||
MAPNIK_LOG_ERROR(datasource_cache)
|
||||
<< "datasource_cache: Registered="
|
||||
<< plugin->name();
|
||||
success = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -228,7 +235,7 @@ bool datasource_cache::register_datasource(std::string const& filename)
|
|||
<< "Exception caught while loading plugin library: "
|
||||
<< filename << " (" << ex.what() << ")";
|
||||
}
|
||||
return success;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ extern "C"
|
|||
#include <boost/iostreams/stream.hpp>
|
||||
|
||||
// stl
|
||||
#include <cstring>
|
||||
#include <memory>
|
||||
|
||||
namespace mapnik
|
||||
|
@ -158,7 +159,7 @@ template <typename T>
|
|||
void png_reader<T>::init()
|
||||
{
|
||||
png_byte header[8];
|
||||
memset(header,0,8);
|
||||
std::memset(header,0,8);
|
||||
stream_.read(reinterpret_cast<char*>(header),8);
|
||||
if ( stream_.gcount() != 8)
|
||||
{
|
||||
|
|
|
@ -128,14 +128,70 @@ vertex_cache & vertex_cache::get_offseted(double offset, double region_width)
|
|||
}
|
||||
offseted_line->reset();
|
||||
offseted_line->next_subpath(); //TODO: Multiple subpath support
|
||||
double seek = (position_ + region_width/2.) * offseted_line->length() / length() - region_width/2.;
|
||||
if (seek < 0) seek = 0;
|
||||
if (seek > offseted_line->length()) seek = offseted_line->length();
|
||||
|
||||
// find the point on the offset line closest to the current position,
|
||||
// which we'll use to make the offset line aligned to this one.
|
||||
double seek = offseted_line->position_closest_to(current_position_);
|
||||
offseted_line->move(seek);
|
||||
|
||||
offseted_lines_[offset] = offseted_line;
|
||||
return *offseted_line;
|
||||
}
|
||||
|
||||
inline double dist_sq(pixel_position const &d) {
|
||||
return d.x*d.x + d.y*d.y;
|
||||
}
|
||||
|
||||
double vertex_cache::position_closest_to(pixel_position const &target_pos)
|
||||
{
|
||||
bool first = true;
|
||||
pixel_position old_pos, new_pos;
|
||||
double lin_pos = 0.0, min_pos = 0.0, min_dist_sq = std::numeric_limits<double>::max();
|
||||
|
||||
// find closest approach of each individual segment to the
|
||||
// target position. would be good if there were some kind
|
||||
// of prior, or fast test to avoid calculating on each
|
||||
// segment, but i can't think of one.
|
||||
for (segment const &seg : current_subpath_->vector) {
|
||||
if (first) {
|
||||
old_pos = seg.pos;
|
||||
min_pos = lin_pos;
|
||||
min_dist_sq = dist_sq(target_pos - old_pos);
|
||||
first = false;
|
||||
|
||||
} else {
|
||||
new_pos = seg.pos;
|
||||
|
||||
pixel_position d = new_pos - old_pos;
|
||||
if ((d.x != 0.0) || (d.y != 0)) {
|
||||
pixel_position c = target_pos - old_pos;
|
||||
double t = (c.x * d.x + c.y * d.y) / dist_sq(d);
|
||||
|
||||
if ((t >= 0.0) && (t <= 1.0)) {
|
||||
pixel_position pt = (d * t) + old_pos;
|
||||
double pt_dist_sq = dist_sq(target_pos - pt);
|
||||
|
||||
if (pt_dist_sq < min_dist_sq) {
|
||||
min_dist_sq = pt_dist_sq;
|
||||
min_pos = lin_pos + seg.length * t;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
old_pos = new_pos;
|
||||
lin_pos += seg.length;
|
||||
|
||||
double end_dist_sq = dist_sq(target_pos - old_pos);
|
||||
if (end_dist_sq < min_dist_sq) {
|
||||
min_dist_sq = end_dist_sq;
|
||||
min_pos = lin_pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return min_pos;
|
||||
}
|
||||
|
||||
bool vertex_cache::forward(double length)
|
||||
{
|
||||
if (length < 0)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <iostream>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
@ -32,7 +33,7 @@ color blend(color const& source, color const& dest, unsigned cover=255)
|
|||
dest_pre.premultiply();
|
||||
|
||||
unsigned char* buffer = new unsigned char[size*size*stride];
|
||||
memset(buffer, 0, size*size*stride);
|
||||
std::memset(buffer, 0, size*size*stride);
|
||||
buffer[0] = dest_pre.r;
|
||||
buffer[1] = dest_pre.g;
|
||||
buffer[2] = dest_pre.b;
|
||||
|
@ -62,7 +63,7 @@ color normal_blend(color const& source, color const& dest, unsigned cover=255)
|
|||
dest_pre.premultiply();
|
||||
// source buffer
|
||||
unsigned char* source_buffer = new unsigned char[size*size*stride];
|
||||
memset(source_buffer, 0, size*size*stride);
|
||||
std::memset(source_buffer, 0, size*size*stride);
|
||||
source_buffer[0] = source_pre.r;
|
||||
source_buffer[1] = source_pre.g;
|
||||
source_buffer[2] = source_pre.b;
|
||||
|
@ -72,7 +73,7 @@ color normal_blend(color const& source, color const& dest, unsigned cover=255)
|
|||
|
||||
// destination buffer
|
||||
unsigned char* dest_buffer = new unsigned char[size*size*stride];
|
||||
memset(dest_buffer, 0, size*size*stride);
|
||||
std::memset(dest_buffer, 0, size*size*stride);
|
||||
dest_buffer[0] = dest_pre.r;
|
||||
dest_buffer[1] = dest_pre.g;
|
||||
dest_buffer[2] = dest_pre.b;
|
||||
|
|
236
tests/cpp_tests/line_offset_test.cpp
Normal file
|
@ -0,0 +1,236 @@
|
|||
|
||||
// mapnik
|
||||
#include <mapnik/coord.hpp>
|
||||
#include <mapnik/text/vertex_cache.hpp>
|
||||
|
||||
// boost
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/version.hpp>
|
||||
|
||||
// stl
|
||||
#include <stdexcept>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
// test
|
||||
#include "utils.hpp"
|
||||
|
||||
struct fake_path
|
||||
{
|
||||
typedef boost::tuple<double, double, unsigned> coord_type;
|
||||
typedef std::vector<coord_type> cont_type;
|
||||
cont_type vertices_;
|
||||
cont_type::iterator itr_;
|
||||
|
||||
fake_path(std::initializer_list<double> l)
|
||||
: fake_path(l.begin(), l.size()) {
|
||||
}
|
||||
|
||||
fake_path(std::vector<double> const &v)
|
||||
: fake_path(v.begin(), v.size()) {
|
||||
}
|
||||
|
||||
template <typename Itr>
|
||||
fake_path(Itr itr, size_t sz) {
|
||||
size_t num_coords = sz >> 1;
|
||||
vertices_.reserve(num_coords);
|
||||
|
||||
for (size_t i = 0; i < num_coords; ++i) {
|
||||
double x = *itr++;
|
||||
double y = *itr++;
|
||||
unsigned cmd = (i == 0) ? agg::path_cmd_move_to : agg::path_cmd_line_to;
|
||||
vertices_.push_back(boost::make_tuple(x, y, cmd));
|
||||
}
|
||||
itr_ = vertices_.begin();
|
||||
}
|
||||
|
||||
unsigned vertex(double *x, double *y) {
|
||||
if (itr_ == vertices_.end()) {
|
||||
return agg::path_cmd_stop;
|
||||
}
|
||||
*x = itr_->get<0>();
|
||||
*y = itr_->get<1>();
|
||||
unsigned cmd = itr_->get<2>();
|
||||
++itr_;
|
||||
return cmd;
|
||||
}
|
||||
|
||||
void rewind(unsigned) {
|
||||
itr_ = vertices_.begin();
|
||||
}
|
||||
};
|
||||
|
||||
double dist(mapnik::pixel_position const &a,
|
||||
mapnik::pixel_position const &b)
|
||||
{
|
||||
mapnik::pixel_position d = a - b;
|
||||
return std::sqrt(d.x*d.x + d.y*d.y);
|
||||
}
|
||||
|
||||
namespace boost { namespace detail {
|
||||
|
||||
template<class T, class U>
|
||||
inline void test_leq_impl(char const * expr1, char const * expr2,
|
||||
char const * file, int line, char const * function,
|
||||
T const & t, U const & u)
|
||||
{
|
||||
if( t > u )
|
||||
{
|
||||
BOOST_LIGHTWEIGHT_TEST_OSTREAM
|
||||
<< file << "(" << line << "): test '" << expr1 << " == " << expr2
|
||||
<< "' failed in function '" << function << "': "
|
||||
<< "'" << t << "' > '" << u << "'" << std::endl;
|
||||
++test_errors();
|
||||
}
|
||||
}
|
||||
|
||||
} }
|
||||
|
||||
#define BOOST_TEST_LEQ(expr1,expr2) ( ::boost::detail::test_leq_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )
|
||||
|
||||
void test_simple_segment(double const &offset)
|
||||
{
|
||||
const double dx = 0.01;
|
||||
fake_path path = {0, 0, 1, 0}, off_path = {0, offset, 1, offset};
|
||||
mapnik::vertex_cache vc(path), off_vc(off_path);
|
||||
|
||||
vc.reset(); vc.next_subpath();
|
||||
off_vc.reset(); off_vc.next_subpath();
|
||||
|
||||
while (vc.move(dx)) {
|
||||
double pos = vc.linear_position();
|
||||
double off_pos = off_vc.position_closest_to(vc.current_position());
|
||||
BOOST_TEST_LEQ(std::abs(pos - off_pos), 1.0e-6);
|
||||
}
|
||||
}
|
||||
|
||||
void test_straight_line(double const &offset) {
|
||||
const double dx = 0.01;
|
||||
fake_path path = {0, 0, 0.1, 0, 0.9, 0, 1, 0},
|
||||
off_path = {0, offset, 0.4, offset, 0.6, offset, 1, offset};
|
||||
mapnik::vertex_cache vc(path), off_vc(off_path);
|
||||
|
||||
vc.reset(); vc.next_subpath();
|
||||
off_vc.reset(); off_vc.next_subpath();
|
||||
|
||||
while (vc.move(dx)) {
|
||||
double pos = vc.linear_position();
|
||||
double off_pos = off_vc.position_closest_to(vc.current_position());
|
||||
BOOST_TEST_LEQ(std::abs(pos - off_pos), 1.0e-6);
|
||||
}
|
||||
}
|
||||
|
||||
void test_offset_curve(double const &offset) {
|
||||
const double dx = 0.01;
|
||||
const double r = (1.0 + offset);
|
||||
|
||||
std::vector<double> pos, off_pos;
|
||||
const size_t max_i = 1000;
|
||||
for (size_t i = 0; i <= max_i; ++i) {
|
||||
double x = M_PI * double(i) / max_i;
|
||||
pos.push_back(-std::cos(x)); pos.push_back(std::sin(x));
|
||||
off_pos.push_back(-r * std::cos(x)); off_pos.push_back(r * std::sin(x));
|
||||
}
|
||||
|
||||
fake_path path(pos), off_path(off_pos);
|
||||
mapnik::vertex_cache vc(path), off_vc(off_path);
|
||||
|
||||
vc.reset(); vc.next_subpath();
|
||||
off_vc.reset(); off_vc.next_subpath();
|
||||
|
||||
while (vc.move(dx)) {
|
||||
double pos = vc.linear_position();
|
||||
double off_pos = off_vc.position_closest_to(vc.current_position());
|
||||
{
|
||||
mapnik::vertex_cache::scoped_state s(off_vc);
|
||||
off_vc.move(off_pos);
|
||||
BOOST_TEST_LEQ(dist(vc.current_position(), off_vc.current_position()), (1.001 * offset));
|
||||
}
|
||||
BOOST_TEST_LEQ(std::abs((pos / vc.length()) - (off_pos / off_vc.length())), 1.0e-3);
|
||||
}
|
||||
}
|
||||
|
||||
void test_s_shaped_curve(double const &offset) {
|
||||
const double dx = 0.01;
|
||||
const double r = (1.0 + offset);
|
||||
const double r2 = (1.0 - offset);
|
||||
|
||||
std::vector<double> pos, off_pos;
|
||||
const size_t max_i = 1000;
|
||||
for (size_t i = 0; i <= max_i; ++i) {
|
||||
double x = M_PI * double(i) / max_i;
|
||||
pos.push_back(-std::cos(x) - 1); pos.push_back(std::sin(x));
|
||||
off_pos.push_back(-r * std::cos(x) - 1); off_pos.push_back(r * std::sin(x));
|
||||
}
|
||||
for (size_t i = 0; i <= max_i; ++i) {
|
||||
double x = M_PI * double(i) / max_i;
|
||||
pos.push_back(-std::cos(x) + 1); pos.push_back(-std::sin(x));
|
||||
off_pos.push_back(-r2 * std::cos(x) + 1); off_pos.push_back(-r2 * std::sin(x));
|
||||
}
|
||||
|
||||
fake_path path(pos), off_path(off_pos);
|
||||
mapnik::vertex_cache vc(path), off_vc(off_path);
|
||||
|
||||
vc.reset(); vc.next_subpath();
|
||||
off_vc.reset(); off_vc.next_subpath();
|
||||
|
||||
while (vc.move(dx)) {
|
||||
double off_pos = off_vc.position_closest_to(vc.current_position());
|
||||
{
|
||||
mapnik::vertex_cache::scoped_state s(off_vc);
|
||||
off_vc.move(off_pos);
|
||||
BOOST_TEST_LEQ(dist(vc.current_position(), off_vc.current_position()), (1.002 * offset));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
std::vector<std::string> args;
|
||||
for (int i=1;i<argc;++i)
|
||||
{
|
||||
args.push_back(argv[i]);
|
||||
}
|
||||
bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
|
||||
|
||||
try {
|
||||
|
||||
BOOST_TEST(set_working_dir(args));
|
||||
|
||||
std::vector<double> offsets = { 0.01, 0.02, 0.1, 0.2 };
|
||||
for (double offset : offsets) {
|
||||
// test simple straight line segment - should be easy to
|
||||
// find the correspondance here.
|
||||
test_simple_segment(offset);
|
||||
|
||||
// test straight line consisting of more than one segment.
|
||||
test_straight_line(offset);
|
||||
|
||||
// test an offset outer curve
|
||||
test_offset_curve(offset);
|
||||
|
||||
// test an offset along an S-shaped curve, which is harder
|
||||
// because the positions along the offset are no longer
|
||||
// linearly related to the positions along the original
|
||||
// curve.
|
||||
test_s_shaped_curve(offset);
|
||||
}
|
||||
}
|
||||
catch (std::exception const& ex)
|
||||
{
|
||||
std::cerr << ex.what() << "\n";
|
||||
}
|
||||
|
||||
if (!::boost::detail::test_errors())
|
||||
{
|
||||
if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
|
||||
else std::clog << "C++ line offset: \x1b[1;32m✓ \x1b[0m\n";
|
||||
::boost::detail::report_errors_remind().called_report_errors_function = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return ::boost::report_errors();
|
||||
}
|
||||
}
|
|
@ -33,9 +33,7 @@ int main(int argc, char** argv)
|
|||
if (!::boost::detail::test_errors()) {
|
||||
if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
|
||||
else std::clog << "C++ exceptions: \x1b[1;32m✓ \x1b[0m\n";
|
||||
#if BOOST_VERSION >= 104600
|
||||
::boost::detail::report_errors_remind().called_report_errors_function = true;
|
||||
#endif
|
||||
} else {
|
||||
return ::boost::report_errors();
|
||||
}
|
||||
|
|
|
@ -30,38 +30,38 @@
|
|||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" !!! # ",
|
||||
" !!! !!!!!! ## #### ",
|
||||
" !!!!!!! !!!!!!!!! ! ####### ## ##### ",
|
||||
" !!!!!!! !!!!!!!!!! !! ######## ############# ",
|
||||
" !!! !!! !!!!!!!!!!! !! !!!! ### ### ######## ## ### $$$$$$ ",
|
||||
" %% %%% !!!!! !! ! !!!!! ##### ## ## ##### $$ $$$ ",
|
||||
" %% %%%%%% %% !!!! !! !!!!!!!! ##### # ######## $$ $$$$$$$ $ $ ",
|
||||
" % %%%%%%%%%%%%%%%%% % %% !!!!! ! !! !! #### # ## ### $ $$$$$$ $$$$$$$$$$ $ ",
|
||||
" % % %%%%%%%%%%%%%%% %%% % !!!! ! !!! ##### # # # $ $$$$$$$$$$ $$$$$$ $$$$ $ ",
|
||||
" % %%%% %%% %%% %%% % !!! ! ! ##### # $$$$$$$ $$$$$$ $ ",
|
||||
" % %%%%% %%%% !!! ! # # $$ $$$$$ $ ",
|
||||
" %%%%% %%%%% % ! !! # # ## $ $$$$ $ ",
|
||||
" % %%%% %%% % ! ! !!! # ### $ $$$ $ ",
|
||||
" %%%% % % !!!! #### $ $ $ ",
|
||||
" % %%% %% ! !! ! #### $$$$$ ",
|
||||
" !! ## ",
|
||||
" !! !!!!!!! # ####### ",
|
||||
" !!!!!! !!!!!!!!! !!! ####### ############ ",
|
||||
" !!!!!!!! !!!!!!!!! !!!! ######## ########## ### ",
|
||||
" !! !!! !!!!!!!!!!! !!!!!!! ## #### ######## # ####### $$$$$$ ",
|
||||
" %% %%% !!!! !! ! !!!!!! #### # ## ## ###### $$ $$$ ",
|
||||
" %% %%%%%% %% !!!!!!! !! !! ##### # ## ## $$ $$ $$$$ $ ",
|
||||
" % %%%%%%% %%%%%%%%% % %% !!!! ! !! #### # ### $ $$$$$$$ $$$ $ ",
|
||||
" % %%%%%%%%%%%%%%%% %%% % !!!!!! ! ##### # # $ $$ $$$$$$$ $$$$ $ ",
|
||||
" % %%% %%% %%% %%% % !!!!!! ! ! ##### # # $$$$$$ $ $$$$$$ $ ",
|
||||
" % %%%%% %%%% !!!!! ! !!!! ### # ### $$$$$ $$$$$ $ ",
|
||||
" %%%% %%%%% % ! !!!!! # # ##### $$ $$$$ $$$$ $ ",
|
||||
" % %%%% %%% % ! ! !! # ## $ $$$$ $$$ $ ",
|
||||
" %%%% % % ! !!! # ### $$$ $$ $ $ ",
|
||||
" % %%% %%% ! !!!! # ### $$ $$$$$ ",
|
||||
" % %% &&&& & && %%%%% ''''' '''' '''''''' ! !!! # (((((( (((( ((( ### $$$$$ )))))) )) ) )) $$$ $ ",
|
||||
" % &&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ! '''''''' '''' !!!! # (((((((((( (((( ### $$$$$ )))))))))) ))))))))))))))) ",
|
||||
" % &&&&&&&& &&& %%%% !!! ' ' ! !! ( ( ## # $$$ ))))))))) ) $$$ $ ",
|
||||
" % &&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ! '''''''' '''' ! ! # (((((((((( (((( # $$$$$ )))))))))) ))))))))))))))) ",
|
||||
" % &&&&&&&& &&& %%%% !!!! ' ' ! !!! ### ( ( # ### $$$ ))))))))) ) $$$ $ ",
|
||||
" % %%%% !!! !!! ### # ### $$$ $$$ $ ",
|
||||
" %%%%% !!! ! ! !! ### # ### $ $$$ $$ ",
|
||||
" % % % !!! !! ## # # $$$ $$ $ ",
|
||||
" % %%% %% % !!! ! !!! ! ### # # ### $ $$$$ $$$ $ ",
|
||||
" % %%% %%%%%%% !!!! ! !!!!!! ### # # #### $ $$$$$$ $$$$$$$$ ",
|
||||
" %%%%%%%% %%%%%%%% % !!! ! ! !!!! ### # # #### $ $ $$$$ $ $$$$$$ $ ",
|
||||
" % %%%%%%%%%%%%%%%%%%%%%%% % !!!!! ! ! !!!! #### # ###### $ $$$$$$$$$$$$$$$$$ $$$$ $ ",
|
||||
" % %%%%%% %%%%%% %%%% % !! !!! ! ! !! ###### # ## ## $$ $$$$$ $$$$$$$$$ $ $ ",
|
||||
" %% %% %%%%%%% % %% !!! !!! !!! !! !! # ### ## ## ## ## $ $$$$$$ $$$ $$ ",
|
||||
" %%% %%% !!!!!! !!!!!!! !! !!! ###### ######### # #### $$$$$ $$$$$ ",
|
||||
" !!!!!! !! !!!!!!!! ###### ## ######## ",
|
||||
" !!! !!!!!!!!! !!!! ## ########## #### ",
|
||||
" !!!!!!!!! ! # ########## # ",
|
||||
" !!!!!! ######### ",
|
||||
" %%%%% !!! ! ! !!! ### # ### $ $$$ $ $$ ",
|
||||
" % % % !!! !!! ### # ### $$$ $ $ ",
|
||||
" % %%% %% % !!! ! ! !!! ### # # ### $ $$$$$ $$$ $ ",
|
||||
" % %%% %%%%%%% !!!! ! ! !!!! #### # # ### $ $$$ $$ $$$$$$$$ ",
|
||||
" % %%%%%% %%%%%%%% % !!!! ! ! !!!! #### # # #### $ $ $$$$ $ $$$$$$ $ ",
|
||||
" % %%%%%%% %%%% %%%%%%%%% % !!! ! ! ! !!! ### # # ## #### $ $$$$$$$$$$$$$$$$$ $$$$ $ ",
|
||||
" % %%%%%% %%%%%%%%%%% % !! !! ! ! !! ## ## # ## ## $$ $$$$$$$$$$$$$$$ $ $ ",
|
||||
" %% %% %%%%%%% %% !!!! !!! !!! ### ## ## $ $$$$$$ $$$ $$ ",
|
||||
" %%% %%% !!!!!!! !!!!!!! !! ####### ######### ### $$$$$ $$$$$ ",
|
||||
" !!!!! !!! !!!!!!!! ##### ## ######## ",
|
||||
" !! !!!!!!!!!! !!!!!! ### ######### ####### ",
|
||||
" !!!!! !!!! !!! ########## #### ",
|
||||
" !! !!! ######### ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
|
|
|
@ -8,66 +8,66 @@
|
|||
"5",
|
||||
"16",
|
||||
"6",
|
||||
"11",
|
||||
"10",
|
||||
"12",
|
||||
"3",
|
||||
"2",
|
||||
"13",
|
||||
"14",
|
||||
"3",
|
||||
"11",
|
||||
"15",
|
||||
"1"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" !!!! ! !!! ! !!!!! ",
|
||||
" !!! !!!!! ! !! ! ",
|
||||
" ! !!! !! ! !!!!! !!! ! ! ",
|
||||
" !!!!!!! !!!!! !! !!!!! ",
|
||||
" ! !! ! !!!!! ! ! !!!! ",
|
||||
" !!!!!!!! !!!!!!! !!!!!!! !!! ",
|
||||
" !! !!!! !! !!! !! !!!!! ",
|
||||
" !!!! ! !!! !!! !! ! ",
|
||||
" !! !!! ! !!! ! !!!!!!! ",
|
||||
" !!!!!! ! !!!!! !!! !!! ! !! ",
|
||||
" !!!!!!!!!!!! !!!!!!! !!! !!!!!! !!!!!! ",
|
||||
" !!!!!!!!!! !!!!!!!!! !!!!!!!! !!!! ",
|
||||
" !!!! !!!!! !!!!! !!!!!!!!!!!!!!!!!!!!! ",
|
||||
" !! # !!!!!!!!! # !!!!!!!!! !!!!!!!! ",
|
||||
" #### !!!!!!! ### !!!!! $# !!!!!! ",
|
||||
" ###### $$$$! ###### !!! ##$##$$$! ## %%% ",
|
||||
" #######$#$ $!$######### ######$$$$####%%% ",
|
||||
" #### ##$## ###########$ ##$#$$###$$####%%% ",
|
||||
" &&&## $$#$#$#### ###$$##$$$$####%### %%% ",
|
||||
" &&& $$$$$$$## ###$$$#$$ ####% %%%% ",
|
||||
" &&& $$$$ $$####### #######$ $$$$$#%%%%%%%%% ",
|
||||
" &&&$$$$$$$ ###$$# #$##### $$$$$$$%%% %%%%% ",
|
||||
" &&$$$$$$$$$$#####$$##$$#$$##$$$$$$$$$%% %%%%% ",
|
||||
" &&&$$$ $$$$$##$ $##$#$##$#$###$ $$$$$$ % %%% ",
|
||||
" &&& $ $$$$$ ####$$$###$$##$ $$$%$ %%'%% ",
|
||||
" &&& $$$ ## $$ ## #### %%%%%%'%% ",
|
||||
" &&& &(( #((( (((### ((((( '''%'''%% ",
|
||||
" &&&((&(&&( (((((( ())(((( (((((((''*''''*% ",
|
||||
" &&((&&(((((((((((((()()))(((((((((((((** %%% ",
|
||||
" &&&(&& &((((((( ((()))))(((((((( (((((* **%%**",
|
||||
" &&& & &&(((( ++)((( ))((**((**********%**",
|
||||
" &&& & &&(((,, +++--))).)))(.*(*(******** *%%*",
|
||||
" &&& & ,,,,,, +++-)))).....(((*)******%%%**% ",
|
||||
" &&& & ,&,,, +++))).......())(( %%%%%*%% ",
|
||||
" &&& &,,,,,,, +++---)))))))(((()( % *%*%%% ",
|
||||
" &&& ,,,,,//,,/,++----))))))(()))((( ***%%% ",
|
||||
" &/&,/,,//,/,///++----))) (0000000 %%***%%% ",
|
||||
" //////,/,,,/,,,/+---)))) 0000000 %%**%%%% ",
|
||||
" ///,///,// , //---))) 0000000*%%%%%*%%% ",
|
||||
" &// /////,,,, /// )))) ********%*%%*%%% ",
|
||||
" &/& / /,/, /// )))) ***********%%%%% ",
|
||||
" &&&/ //,, /// ))))))))))))) **** %%% ",
|
||||
" //&////// /// )))))))))))) ** **** %%% ",
|
||||
" &&& ///// //// ))))))))))) **** *%% ",
|
||||
" / ///// ////// 111 * ** * ",
|
||||
" /////////// 111111111111*** * ",
|
||||
" /////////// 111111111111** * ",
|
||||
" ///// //// 1111111111111 ",
|
||||
" / /// /// 1 1111 ",
|
||||
" / / /// 1 11 ",
|
||||
" / /// 1 ",
|
||||
" //// 1 1111 ",
|
||||
" // 1111111 ",
|
||||
" #### !!!!!!! ### !$$!! ## !!!!!! ",
|
||||
" ####$$ $ !!! ###### $$$$$#$## !! ## %%% ",
|
||||
" #####$##$$$$! ######### $ $$$##### ####%%% ",
|
||||
" ####$##$## ##########$$ ###$$##########%%% ",
|
||||
" &&&## $$$#$$$$#### ####$$$#$$$$ ####%### %%% ",
|
||||
" &&& $$$$#$$$## #### #$$$$#$$ ####% %%%% ",
|
||||
" &&& $$$$$$$$###$# # #$$##$#$ $$$$$#%%%%%%%%% ",
|
||||
" &&&$$$$$$$ $##$$$ $$$$$$# $$$$$$$%%% %%%%% ",
|
||||
" &&$$$$$$$$$$$$$$$$#$##$$$$$$$$$$$$$$$%% %%%%% ",
|
||||
" &&&$$$ $$$$$$$$ $#######$$$$$$$ $$$$$$ % %%% ",
|
||||
" &&& $ $$$$$ $##$$### $$$$$ $$$%$ %%'%% ",
|
||||
" &&& $$$ $$ $ %%%%%%'%% ",
|
||||
" &&& &(( (((( (((( ((((( '''%''')% ",
|
||||
" &&&((&(&&( (((((( ((((((( (((((((''')''))% ",
|
||||
" &&((&&(((((((((((((((((((((((((((((((( )))%)) ",
|
||||
" &&&(&& &((((((( ((((((( ((((((( ((((( )) %)))",
|
||||
" &&& & &&(((( **+((( (((()()()))))))) )%))",
|
||||
" &&& & &&(((,, ***++-.......(())))))))))) ))%)",
|
||||
" &&& & ,,,,,, ***-++......(((()/))))))%%%))%)",
|
||||
" &&& & ,&,,, ++*-+++......(///( %%%%%)%) ",
|
||||
" &&& &,,,,,,, *+*--+++////((((/(((( % )%)))) ",
|
||||
" &&& ,,,,,++,,+,**+++-//////(/(((/ )))%%% ",
|
||||
" &&&,,,,++,+,+++**-++-/// 0000000 %%)))%%% ",
|
||||
" &&&,,,,+,,,+,,,+*-+-+/// 0000000 %%))%%%% ",
|
||||
" &&&,,,+,++ , ++---/// 0000000)%%%%%)%%% ",
|
||||
" &&& +++,,,, +++ //// ))))))))%)%%)%%% ",
|
||||
" &&& +,+, +++ //// )))))))))))%%%%% ",
|
||||
" &&& ++,, +++ ///////////// )))) %%% ",
|
||||
" &&& ++++ +++ ////////////)) ))) %%% ",
|
||||
" &&& ++++ ++++ / /////////// ) ))) %%% ",
|
||||
" +++++ ++++++ // / 111) ",
|
||||
" +++++++++++/ ///11111)))))) ",
|
||||
" ++++++++ /// //111111))1))))) ",
|
||||
" +++++++ // ///111111111111 ",
|
||||
" ++++ ++ /// 1 1111 ",
|
||||
" +++ ++ 1 11 ",
|
||||
" +++ + + 1 ",
|
||||
" ++++ ++++ 1 1111 ",
|
||||
" + 1111111 ",
|
||||
" ",
|
||||
" "
|
||||
]
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
"7",
|
||||
"16",
|
||||
"6",
|
||||
"2",
|
||||
"10",
|
||||
"2",
|
||||
"12",
|
||||
"13",
|
||||
"14",
|
||||
|
@ -24,18 +24,18 @@
|
|||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ! ! !! ! ",
|
||||
" !!!! ! ! !!! ! !!!! ",
|
||||
" !!!! !! !!!!! !!!!! ! ! !!! ! ",
|
||||
" !!!! ! ! !! ! !! !! !! ! !!! ! ",
|
||||
" ! !!! !!!! ! !!! !!!!!! !!! !!!! ! ! ",
|
||||
" !! !!!!!! !! !! ! !!!! !!!! ! !!! !!! !!! !!! ",
|
||||
" !!! !!!!!!!!! !!! ! !!!!!!!!! !!! ! !!!!! !!!!!! !! ",
|
||||
" !!! ! ",
|
||||
" !!! ! !!! ! !! ",
|
||||
" ! ! ! !! !! !! !! !!!! ",
|
||||
" !!! ! ! ! ! !!!! !!!! !!! ! ",
|
||||
" ! !!! !!!! ! !!!!!!! ! ! !!!! ! !! ",
|
||||
" !!!! !!!!!! !! !!! ! !! !!!! !!!! ! !!!! ! !!! !! ",
|
||||
" !!! !!!!!!!!! !!!! ! !!!!!!!! !!!!! !!!!! !!! !!! ! !!!! ",
|
||||
" !!!!!! !!!!!!! !! !!!!! !!!!!! !! !!!!!!!!!!! ! !!! !!!!! ",
|
||||
" !!!!!! !!!!! !!! !!!!!! !!!!! !!!! !!!!!! !!!!!! !!!!!!!!!!!! ",
|
||||
" !!!!! !!!!! ! !!!!!! !!!!!!! !!!!!! !!!!! ! ! !!!!! ",
|
||||
" !!!! !!!!!! !!!!!! !!!!!!! !!!!! !!!!! !!!!!! ",
|
||||
" ! !!!!!!!!!!!! !!!! !!!!!!!!!!! ! !!! !!!!!!!! ! ! !!! ",
|
||||
" !!!!!! !!!!!! !!! ! !!!!! !!!!!! !!! !! !!!!!!!!!!! !!! !!!!! ",
|
||||
" !!!!!! !!!!! !!! !!! !!!!!! !!!!! !! ! !!!!!!! !!!!!! !!!!!!!!!! ",
|
||||
" !!!!! !!!!! !!!!! !!!!!! !!!!!!! ! !!!!!! !!!!! !!!!! ",
|
||||
" !!!! !!!!!!! !!!!!!! !!!!!! !!!!! !!!!! !!!!!! ",
|
||||
" ! !!!!! !!!!!! !!!!!!!!!!! !!!!!!!!!!! ",
|
||||
" !!!!!!!!! !!!!!!!!! !!!!!!! ",
|
||||
" # !!!!!!! # !!!!!! !!!!! ",
|
||||
|
@ -46,15 +46,15 @@
|
|||
" ###### ###### ###### ##### ###### ##### ###$$$$$$$$ ",
|
||||
" ##### ###### ##### ###### ##### ###### #####$$ $$$$$ ",
|
||||
" %%%%#### ##### ###### ###### ##### ###### ###### $$$ ",
|
||||
" %%%% # & &&& #####&&&&##### & & ##### ###### #&######## $$ $$$ ",
|
||||
" %%%% & & && ###&&#&&#### & ###########& #&###### $$ $$$$ ",
|
||||
" %%%% & &&#&#&### &&& ##&#####&& & &&& &&### $$$$$ $$$ ",
|
||||
" %%%% &&&&& & &&#&&# &&& ##&##&&& &&& && &&&& $ $$ $$$ ",
|
||||
" %%%%%% &&&&&&&& &&## & && &## && && &&&&&& $$$$$ ",
|
||||
" %%%%% &&&& && &&&#&&&&& &&& &&&&&& & &&&&&&&&&& && $$$ ",
|
||||
" %%%%%% &&&&&&&&& &&& &&&&&&&& && &&& &&&&&&&& && & &&&&&&&&&&& $$$ ",
|
||||
" %%%%%% &%&&&&&&& &&& &&&&&&&&&&& &&&&&&&&&&&&&& &&& &&&&&&&&&&&& $$$ ",
|
||||
" %%%%%%&&&&&&&&&&& &&&&&&& &&&&&& &&&&&& &&&& && &&&&&& &&&& & $$$ ",
|
||||
" %%%% # & ##### & ##### ##### ###### ########## $$ $$$ ",
|
||||
" %%%% && & ####&&###### & ######&#### ######## $$ $$$$ ",
|
||||
" %%%% & && #&&&##### &&&& & ####&&&# & ##### $$$$$ $$$ ",
|
||||
" %%%% &&&& &&& &&###&&& &&&&& ####&&&&& ## ## $ $$ $$$ ",
|
||||
" %%%%%% & & && && & &&&&& &&&&& #&#& & &&## ###### $$$$$ ",
|
||||
" %%%%% &&&& && &&&&#&&&&& &&& &&&&&& && && &&&&&### # $$$ ",
|
||||
" %%%%%% &&&&&&&&&& &&& &&&&&&&& && &&& &&&&&&&& && &&&&&&&&&&&&##### $$$ ",
|
||||
" %%%%%% &%&&&&&&& & & &&&&&&&&&&& &&&&&&&&&&&&&& &&&&&&&&&&&&&&&## # $$$ ",
|
||||
" %%%%%%&&&&&&&&&&& &&&&&& &&&&&& &&&&&& &&&&& &&&&&&&& &&&& # & $$$ ",
|
||||
" %%%%%%%%%& &&&& &&&&&& &&&& &&&&& &&&& &&&&& &&&&&&&&& $$$ ",
|
||||
" %%%%%%&%% &&&&&&&&&& &&&&&&&&&& &&&&&&&&&& &&&&&&&& $$$ ",
|
||||
" %%%%%%%% &&&&&&&&& &&&&&&&& &&&&&&&& &&&&&& $$$ ",
|
||||
|
@ -65,49 +65,49 @@
|
|||
" %%%% ''''''''''''$$$$$ ",
|
||||
" %%%% (( ((((( ((((( ((((((( '''''''''$'''$$$$ ",
|
||||
" %%%% ((((((( (((((((( (((((((( ((((((((( ''''''''$$$'$$$$$ ",
|
||||
" %%%% ((((((((( (((((((((( ((((((((((( ((((((((((( ''''' ' $ $$$ ",
|
||||
" %%%% %(((((((((( (((((( (((( (((((( ((((( (((((( (((( ''' ''' $$$ ",
|
||||
" %%%%%%(((( ( ((((( (((((( (( (((( ((((( ((((( ((((( (((( (( '' ''$$ ",
|
||||
" %%%%%%((% (((((((( ((((((((( ( ((((((((((( ( (((((((((( ((((((((( '''' ''$$$ ",
|
||||
" %%%%%%( (( ((((((((((((( ((((((((( (( (((((((( (((((((((( ' ' '$$$ ",
|
||||
" %%%%%% % ( (((((((())( (((((((((( ( ((((( (*** (( (((( $$$ ",
|
||||
" %%%%% %%% ( (((( ))))(( ((++ (((((( (( ( ( ((((*********(*(***** $$$$$$ ",
|
||||
" %%%%%%%%% ((( ( )))))((((((++ ,,,( (( (( ( *((*****(*((((****** $$$$$$$$ ",
|
||||
" %%%% %% ((( )))))) ( +(( ,,, ((((------------ (**(*****((***********$$ $$$$$ ",
|
||||
" %%% %% ( (( ()))) ((+ ,,, ((------------((((( (((((((((***** $$$ ",
|
||||
" %%% ())))) +++ ,,, (------------((-( ((((( **$$ $$$ ",
|
||||
" %%% ))())) ..++ ,,, ////////////// **$$ $$$$ ",
|
||||
" %%% ))))) ..... ,,/// ////////////////////// $$$$$ $$$ ",
|
||||
" %%% )))))))) .+... ,//, / /////////////////////// *$*$$ $$$ ",
|
||||
" %%% )))))) )) ) ....++..,/// //////////////////////// *** $$$$$ ",
|
||||
" %%% ))))) ))).)..... ..+...,,/ //// *** $$$ ",
|
||||
" %%% )))))) ))).)))........ ..+ /,, / /// *** $$$ ",
|
||||
" %%% )).)) ) ..)..............+ ,/, ///// *** $$$ ",
|
||||
" %%% )).)) .)))). .......+.++,// / /// 000000000000000 *** $$$ ",
|
||||
" %%%)))).. .. ))).. ...+++,,,,// /// 000000000000000 **** $$$ ",
|
||||
" %%% ))). . ..).. .... ,,,,// /// 000000000000000 **** $$$ ",
|
||||
" %%% )). . ..... ....,,,, /// *** $$$ ",
|
||||
" %%% .. . .... .....,, /// **** ****$ $$$$ ",
|
||||
" %%% .. ..... .... /// *********************$$$$$$$$$ ",
|
||||
" %%% . ... ... /// *********************$$$ $$$$$ ",
|
||||
" %%% . ... ... /// ********************* $ $$$$$ ",
|
||||
" %%% .. ... ... //// **** * $$$$$ ",
|
||||
" %%% .... ... ///// ** * $ $$$$$ ",
|
||||
" %%% .... ... /////////////////////// $$$$$$$$$ ",
|
||||
" %%% .... .... /////////////////////* ****** $ $$$ ",
|
||||
" %%% .... ....... ////////////////////*** **** $$$ ",
|
||||
" %%% .... ... ... // ////////////////// $$$ ",
|
||||
" .... ..... . ////// / /// $$$ ",
|
||||
" .... ....... .. // / / /// / /// ",
|
||||
" .... ......... . // // /// / ",
|
||||
" .......... ..... . . .. ////// /////1/1/111111111111 ",
|
||||
" . .............. . ... ////11111//111//111111111111 ",
|
||||
" . ............ ... 11111111111111111111111111 ",
|
||||
" . .... .... . 11111111111111111111 ",
|
||||
" .. ... . 1111 11 ",
|
||||
" %%%% ((((((((( (((((((((( ((((((((((( ((((((((((( ) ) $ $$$ ",
|
||||
" %%%% %(((((((((( (((((( (((( (((((( ((((( ((((((( (((( ))))) ) $$$ ",
|
||||
" %%%%%%(((( ((((( (((((( ( (((( ((((( ((((( ((((( ( ( (((( )))))) $$$ ",
|
||||
" %%%%%%((% (((((( ((((((((( ( (((((((((( ( (((((((((( ( ((((()))(( $$$ ",
|
||||
" %%%%%%( ( (((((((((((((( (((((((((((( (((((((( (((()))(( ) $$$ ",
|
||||
" %%%%%% % ((((((((((**( (((((((((( (( ((((( ))) (( (( ()(() ) )) $$$ ",
|
||||
" %%%%% %%%((( ((((((( ****(((((++ (( ((( ((( (( (( ( ))(((())())))))))) ) $$$$$$ ",
|
||||
" %%%%%%%%%((( (( ****(*((((((+ ,,(, (( ( (((( )((()))(())))))))))) $$$$$$$$ ",
|
||||
" %%%% %% ((( ( ******(( (((+ ,,, ((------(((--((- ))()))(()))))))))))))$$ $$$$$ ",
|
||||
" %%% %% (( ***** +++ ,,,( (-------(((((-( ))))) $$$ ",
|
||||
" %%% (((***** +++ ,,, (---------((((--( ))$$ $$$ ",
|
||||
" %%% ****** ++. ,,, , ////////////// ))$$ $$$$ ",
|
||||
" %%% ***** .+++ ,,,,,,,,///////////////////// $$$$$ $$$ ",
|
||||
" %%% ******** .. +....,,,, , ,,///////////////////// )$)$$ $$$ ",
|
||||
" %%% ****** ** * ....++..,,,,, ,,,//////////////////// ))) $$$$$ ",
|
||||
" %%% ***** ***.*..... .+...,, ,,/,,/ ))) $$$ ",
|
||||
" %%% ****** ***.***........ +.+..,, , ,// ))) $$$ ",
|
||||
" %%% ***** * ..*............+.. ,,, , ,,/ ))) $$$ ",
|
||||
" %%% *****. .****. .......+.+.,,,,, ,,/ 000000000000000 ))) $$$ ",
|
||||
" %%%*****. .. ***.. ...+++,,,, /,/ 000000000000000 )))) $$$ ",
|
||||
" %%% **.. . ..*.. .... ,,,, /// 000000000000000 )))) $$$ ",
|
||||
" %%% ** . . ..... ....,,,, /// ))) $$$ ",
|
||||
" %%% . . .... .....,,/ /// )))) ))))$ $$$$ ",
|
||||
" %%% . .... .... //// /// )))))))))))))))))))))$$$$$$$$$ ",
|
||||
" %%% . . ... ... / ///// )))))))))))))))))))))$$$ $$$$$ ",
|
||||
" %%% ... ... ... // ///// ))))))))))))))))))))) $ $$$$$ ",
|
||||
" %%% .. ... ... // ///// )) )))) )) ) $$$$$ ",
|
||||
" %%% .... ... // / ///// ) ) )) )))))) $ $$$$$ ",
|
||||
" %%% .... ... / ////////////////////))//// $$$$$$$$$ ",
|
||||
" %%% .... .... / // ////////////////)))))) )) )))) ) )) $ $$$ ",
|
||||
" %%% .... .... // /////////////////)))/))) ) ))) $$$ ",
|
||||
" %%% .... ... .. ////////////////// $$$ ",
|
||||
" .... .... .. //// // $$$ ",
|
||||
" .... ........ . /// // ",
|
||||
" ..... ......... . // // ",
|
||||
" . .......... ......... .. ///111///11111111111 ",
|
||||
" .. . .............. . .. 111111/11/11///11111111111 ",
|
||||
" . .. ............ .. . 11111111111111111111111111 ",
|
||||
" ... .. . .... ... 11111111111111111111 ",
|
||||
" .. .. . 1111 11 ",
|
||||
" . ... 111 11 ",
|
||||
" . .. 11 1 11 ",
|
||||
" ..... 11 1 11 ",
|
||||
" ..... 111 11111 ",
|
||||
" 111 11111 ",
|
||||
" 1 111111 ",
|
||||
" ",
|
||||
" ",
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
"7",
|
||||
"16",
|
||||
"6",
|
||||
"10",
|
||||
"2",
|
||||
"12",
|
||||
"10",
|
||||
"13",
|
||||
"14",
|
||||
"11",
|
||||
|
@ -26,25 +26,25 @@
|
|||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ! ",
|
||||
" ! !!! ",
|
||||
" !!! !! !! ! ",
|
||||
" ! ! !!! !! ! ",
|
||||
" !! !! ! !! ! !!! ",
|
||||
" ! !!!! !! ",
|
||||
" ! ! ! ! ! ! ",
|
||||
" !! ! !! ! !!! !!!!! ",
|
||||
" !! ! !!! !! !!!!! !!! !! ",
|
||||
" !!! !! !!!! ! ! !!! !!! ! ! ! !!!!! ",
|
||||
" ! ! ! !!!!! ! !!! ! !!!! !!!! ! ! !!!! !! ",
|
||||
" ! ! !!!!!!!!! !!!! ! !!!!! ! ! ! !! ! ! ",
|
||||
" !!! ! !!!!! ! !!! !! !! !!! !!!!! ! !!!! ! ",
|
||||
" ! !! !! !!!!!!!! !! !!!! !!!!! ! !! !! ! ! !!!! !! ",
|
||||
" !! !!! !!!!!!!!!!!!! !!! !! !!!!!!!!! !!!!! !!!!! !!!! !! ! ! !! ",
|
||||
" ! !!! ! !!!!!! !!!!! !! ! ! !!!!!!!!!!!! ! !! !!! !!!!!!!!! !!! !! ",
|
||||
" ! ! !!!!!! !!!!! ! ! !!! !!!!! !!!!!! !!! !! !!!!!!!!!!!!!! ! ! !! !!!!!! ",
|
||||
" ! ! !!!!!! !!!!!! ! ! ! ! !!!!!!!! !!!!!! !!! ! !!!!!!!!!!! !!!!! ! ! !!! !!!!!! ",
|
||||
" !!!!!! !!!!! ! !!! ! !!!! !!!!!! !!!!! !!! !!!!! ! !! !!!!! !!!!!! ! !!! ! !!!!! ",
|
||||
" !!!!!!! !!!!! !! !! ! !!!!!! !!!!! !!! !!! ! !!!!!!! !!!!!! !! ! !!!!!! ",
|
||||
" !!!!!! !!!!! !! ! !!!!!! !!!!!!!!!! !!!!!!! !!!!! !!! !! !!!!!! ",
|
||||
" !!!!! !!!!!! ! ! !!!!! !!!!!!!!!!! !!!!! !!!!! ! !! !!!!! ",
|
||||
" !!! !!!!! !!!! !!!!!! !!!!! !!! !!!!!! !!!!!! !!!!!!!! ",
|
||||
" ! ! !!!!!! !!!!! ! !! ! !!!!!!!!!! !! !! !!! !!!!!!!! ! !!! !!! !!! !! ",
|
||||
" !!!!!!!!!!! !!!!! !! ! ! !!!!! !!!!!!!!! !! ! !!!!!!!!!!! !! !! ! !!!!!!!! ",
|
||||
" !!! !!!!!! !!!!!!!!! !!!!!!! !!!!!! !!!!!!!!!! ! !! ! !!!!!! !!!!! ! !!!!!!!!!!! ",
|
||||
" ! !!!!!! !!!!! !!! !!! !!! !!!!!! !!!!! !!! !!! ! ! !!!!! !!!!!! ! ! !! !!!!! ",
|
||||
" !!!!!!! !!!!! ! ! !! !!!!!! !!!!! !!! ! ! !!!!!! !!!!!!!!! ! !!!!!!! ",
|
||||
" !!!!!! !!!!! ! !! !!! !!!!!! !!!!!! !!!! !!!!!! !!!!! ! !! !!!!!!! ",
|
||||
" !!!!! !!!!!!! !!! !!!!! !!!!!! !!! !!!!! !!!!! !! !!!!! ",
|
||||
" !!! !!!!! !!!!!!! !!!!! ! !!!!!! !!!!!! !!!!!! ",
|
||||
" !!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! ",
|
||||
" !!!!! !! !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! ",
|
||||
" !!!!! !!!!!! !!!!!! !!!!! !!!!!!!!!! ",
|
||||
" !!!!!!!!!!! !!!!!!!!! !!!!!!!! ",
|
||||
" !!!!!!! !!!!!! !!!!! ",
|
||||
|
@ -52,29 +52,29 @@
|
|||
" ##### !!! #### ! # $$$$ ",
|
||||
" ######## ###### ### $$$$ ",
|
||||
" ########## ######### ##### ## $$$$ ",
|
||||
" ###### ###### ###### ##### ######### ####$ $$$$ ",
|
||||
" ###### ###### ######## ##### ########### #####$ $ $$$$ ",
|
||||
" ###### ##### ###### ########### ##### ##### ######$$$$$$$$$ ",
|
||||
" ########### ##### ###### ######### ################ ##### $$ $$$$$$ ",
|
||||
" ###### ### # # ## ###### ##### ## ##### ######## ## ##### ###### $ $$$$$$ ",
|
||||
" ##### # #### ######### ###### ## ##### ##### ###### ###### $$$$$$ ",
|
||||
" %%% ### ### ### ##### ###### ## ###### ##### # ## ###### ######### $$$$$ ",
|
||||
" %%% #### ## # ##### ###### # ##### ###### # #### ##### ###### ### $$ $$$$$$ ",
|
||||
" %%% ## ### # ###### ###### # ##### ###### # #### ############## # $$$$ ",
|
||||
" %%% %% ## ##### ##### ## ###### ##### # & ############ #### $$$$ ",
|
||||
" %%% %%%%% & ## ########### & ##&&###### & # &&& ##### # ## $$$$ ",
|
||||
" %%%%% % & &&& & ### ##&&&#### & &&&& &#&&#### && & &&&& ## #### $$$$ ",
|
||||
" %%%%% % && && ## #&&&##& && & &&&& &&&& &&& & ### $$$$ ",
|
||||
" %%%%% %% &&& & &&&&#&#&& &&& &&&& &&&& && &&&& & && & && $$$$ ",
|
||||
" %%% % %%% && & && &&& &&&& && &&& & & && && & & & &&&& &&&&& &&& $$$$$$ ",
|
||||
" %%% %%% & && && & &&&&& &&&&& && & &&&&&&&&&&&&& &&& &&&&&&&&&&&&&& && $$$$$$$$$ ",
|
||||
" %%%% % &&&&&&&& & & & & &&&&&&&&& && &&& &&&&&&&&&&&&&& &&& &&&&&&&&&&&&&& $$ $$$$$$ ",
|
||||
" %%% &&&&&&&&&& && & &&&&&&&&&&&& & & &&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& $ $$$$ ",
|
||||
" %%% &&&&&&&&&&&&& & &&&&&&& &&&&&&& &&&&&& &&&&&& & &&&&&& &&&&& & $$ $$$$ ",
|
||||
" %%% &&&&&& &&&& && &&&&&& &&&& & &&&&&& &&&& &&& &&&&& &&&& & & $$ $$$$$ ",
|
||||
" %%% &&&&& &&&&&&&& &&&&& &&&& && &&&&& &&&&&& &&&&& &&&& && & $$$$ $$$$ ",
|
||||
" %%% &&&&& &&&&&&&& &&&&& &&&&& &&&&& &&&& & &&&&&& &&&& &&&& $$ $$$$ ",
|
||||
" %%% &&& &&&&& &&&&&& &&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&&& $$$$$$ ",
|
||||
" ###### ####### ###### ##### ######### ####$ $$$$ ",
|
||||
" ###### ######### ############## ########### #####$ $ $$$$ ",
|
||||
" ###### ########## ###### ########### ##### ##### ######$$$$$$$$$ ",
|
||||
" ####### ###### ###### # # # ###### ##### ###### ##### $$ $$$$$$ ",
|
||||
" ###### ## ## ###### ##### ##### ###### ##### ###### $ $$$$$$ ",
|
||||
" ##### ## ## ###### ###### # ## ##### ##### ###### ###### $$$$$$ ",
|
||||
" %%% ### ### ### ###### ###### ####### ###### ##### ## ###### ######### $$$$$ ",
|
||||
" %%% # # ######## ######## # ### ##### ###### ## ######### ###### ## $$ $$$$$$ ",
|
||||
" %%% # ######### ############ ##### ###### ### ### ############## ## $$$$ ",
|
||||
" %%% %% ### ## ##### ##### ## ### ###### ##### & ### # ############ ## # $$$$ ",
|
||||
" %%% %%%%% & & ### ### #######&### ## #### && ########## &&& ### # ##### # ## $$$$ ",
|
||||
" %%%%% % & &&& #### # ###&&&### # #### &&&& & ####### &&&& # ## ## #### $$$$ ",
|
||||
" %%%%% % &&& #### &##&&&#& # ## && & & && #### & &&& ## ### $$$$ ",
|
||||
" %%%%% %% & & # &### & # # &&&&& ## &&&&& & # $$$$ ",
|
||||
" %%% % %%% &&&&&& # && &&&&& & &&& & & && & &&&&& & & $$$$$$ ",
|
||||
" %%% %%%&&&&& && & & & & &&&&& & & &&&&&&&&&&&&& &&& & &&& &&&&&&&&& &&& && $$$$$$$$$ ",
|
||||
" %%%% % & &&&&&&&& & &&& & & &&&&&&&&& &&&&& & &&&&&&&&&&& &&&&& & &&&&&&&&&&& && &&& $$ $$$$$$ ",
|
||||
" %%% &&&&&&&&&& & & &&&&&&&&&&&& & &&&& &&&&&&&&&&&&& &&& &&&&&&&&&&&&&&& && $ $$$$ ",
|
||||
" %%% &&&&&&&&&&&&& && & &&&&&&& &&&&&&&& & & &&&&&& &&&&&&& && &&&&&& &&&&&& & $$ $$$$ ",
|
||||
" %%% &&&&&& &&&&& & && &&&&&& &&&& &&& && &&&&&& &&&& && &&&& &&&&& &&&& &&& $$ $$$$$ ",
|
||||
" %%% &&&&& &&&&&&&& & &&&&& &&&& &&&& &&&&& &&&& &&&& &&&&& &&&& & & $$$$ $$$$ ",
|
||||
" %%% &&&&& &&&&&&&&&& &&&&& &&&&& & &&&&& &&&& &&&&&& &&&& &&&& $$ $$$$ ",
|
||||
" %%% &&& &&&&& & &&&&&& &&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&&& $$$$$$ ",
|
||||
" %%% & &&&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&& &&&&&&&&& $$$$ ",
|
||||
" %%% &&&&&&&&& &&&&&&&&& &&&&&&&& &&&&&& $$$$ ",
|
||||
" %%%%% &&&&&&& &&&&&& &&& & $$$$ ",
|
||||
|
@ -86,69 +86,69 @@
|
|||
" %%%% %% '''''''''''''''''$$$$$$$$$ ",
|
||||
" %%%%%% % '''''''''''''''''$$ $$$$$$ ",
|
||||
" %%% ((( (((((( ((((((( '''''''''''''''''$' $$$$$$ ",
|
||||
" %%% ((((((( (((((((( ((((((((( ((((((((((( ' ' $$$$$$ ",
|
||||
" %%% (((((((((( ((((((((((( (((((((((((( ((((((((((((( '''''' $ $$$$$ ",
|
||||
" %%% ((((((((((((( ((((((((((((( (((((((( ((((( (((((( ((( (((( $$ $$$$$$ ",
|
||||
" %%% ((((((( ((((( (((((( (((((( ((((( ((((( (((( ((((( ( (((( '' ' ' ' $ $$$$ ",
|
||||
" %%% (((((((((( (((( (((((((((((( ((((( (((((( ((((( ((((( ((((( ((( (((( ( '''' $$$$ ",
|
||||
" %%% ((((((( ( ( (((( ((((( ( ( (((( ((((( ( (((( (((((( ( ( ( ((((( ((( $$$$ ",
|
||||
" %%%%% (((( ( ( (((( ((((( ( (( (((( ((((( ( ((((( (((((( ( (((( (((((((((((( $$$$ ",
|
||||
" %%% %% %( ((((( (((((( (((((( (((((( ((((((((((( ( ((( (((((((((( ( ( ( (((((((((( $$$$ ",
|
||||
" %%% %%%% (((( ( (((((((((((( ( ((( ((((((((( ( ( ( (((((((( (( ((((((( $$$$ ",
|
||||
" %%%% %% ( ( ((((((((( )) (( (((((( (( ((((( ( ( (( ( $$$$$$$ ",
|
||||
" %%% % %% (( (((((((( )))) *(* (( ( ( ( (( ((( +++++++ ((( ( $$$$$$$$$ ",
|
||||
" %%% %% ( (( ))))) **** ( ((((( ( (((((( ++++++++++++++++++((+++++++ $$ $$$$$$ ",
|
||||
" %%% % % ((( )))))) **** ( ,,,(( ( ((((+++++++++++++++++((+++((((+++ $$$$$$ ",
|
||||
" %%% %%%% ((( ())))) *** ((,(( (( -- (( (( (( .++.++++++++++++(((+(+((++++++ $$ $$$$$$ ",
|
||||
" %%% %% ( (((())) *** (((,(( -----.--....---(-((((- ....... ( ( +++++++++ $$ $$$$$ ",
|
||||
" %%% (((((())) *** (,(, -----..-...----------- ...... +++++ $$$$ $$$$ ",
|
||||
" %%% ))))))) ) *** ,,, -----.---------------- .. .. ++++ $ $$ $$$$ ",
|
||||
" %%% ))))))) ) **** ,,, ...... .. ... ... ++++ $$$$$$ ",
|
||||
" %%% )))))))) ))) **** ,,, ..... ... . . ... ++++ $$$ ",
|
||||
" %%% ))))) ) ) ))) **** ,,, ........................ +++ $$$ ",
|
||||
" %%% ))))) ) ) / /// *** ,,,, . ................................ +++ $$$ ",
|
||||
" %%% %% )))))) ))) ///// *** ,,,, ... . ................................ +++ $$$ ",
|
||||
" %%% %%%% ))))) ))) / / *** ,,,. . . .................... +++ $$$ ",
|
||||
" %%% %%%%% )))))) / //// *** ,,, .. ...... +++ $$$ ",
|
||||
" %%% % % )))))) //// /// **** ,,, .. ...... +++ $$$ ",
|
||||
" %%% % %% ))))) /////////// // ///* ,,,.... ... +++ $$ $$$$ ",
|
||||
" %%% % %% )))))) ///////////////// / */* ,,,,. .. ... +++$$$$$$$$$ ",
|
||||
" %%% % % )))))) //////////////////////***//,,,, .. ... +++$$$ $ $$$ ",
|
||||
" %%% %% ))))) ))) ) ////// //////// //*///,,,, ..... +++ $ $$$$$ ",
|
||||
" %%% %% )))))))))))))) ///// //// ***///,, .... 00000000000000000000000 ++++ $$$$$ ",
|
||||
" %%% )))))))) ) )))////// /////*/ //,, .... 00000000000000000000000 ++++ $ $$$$ ",
|
||||
" %%% ))))) )))////// /////// ,,, ... 00000000000000000000000 +++ $$ $$$$$ ",
|
||||
" %%% ))) ///// //// / /,,, ... 00 00 0 +++ $ $$$ ",
|
||||
" %%% )) ))) //// //// ,,,, ... 000000 +++ $$$ ",
|
||||
" %%% ) /// //// ,,,, ... ++++ $$$ ",
|
||||
" %%% //// ///// ... 0000 0000 ++++ $$$ ",
|
||||
" %%% % //// //// ... +++0+0+0+000++++++++++++++++++++++ $$$ ",
|
||||
" %%% %% %% /// /// .... +++++++++++++++++++++++++++++++++ $$$ ",
|
||||
" %%% % /// //// ....... +++++++++++++++++++++++++++++++++ $$$$$$ ",
|
||||
" %%% %% /// /// ... ..... + + +++++++++++ $$$$$$$$ ",
|
||||
" %%% %% %% /// /// .. . ... ++++++ +++++++ $$ $$$$$ ",
|
||||
" %%% %% %% / /// /// .. . .... + ++++++ $$$$$$ ",
|
||||
" %%% %% %% // ////// //// .. ....... ++++ + ++ $$ $$$$$ ",
|
||||
" %%% % % / / ////// /// / // . ......... +++ + +++++ $$ $$$$ ",
|
||||
" %%% /// /// ///// / / .. .. ...... +++ + $$$$ $$$ ",
|
||||
" %%% // ////// ////// .. ............................... $ $$ $$$ ",
|
||||
" %%% // ////// /// // / . .............................. $$$$$ ",
|
||||
" %%% / // //// /// // / ............................ $$$ ",
|
||||
" %%% // /// //// ///// / .. ... . ... . $$$ ",
|
||||
" / //// //// / . ... . . . $$$ ",
|
||||
" //// ///// / .. .. ",
|
||||
" //// ////// ......... .... .... ",
|
||||
" //// ////// .. ... . . ... ",
|
||||
" %%% ((((((( (((((((( ((((((((( ((((((((((( ' '' $$$$$$ ",
|
||||
" %%% (((((((((( ((((((((((( (((((((((((( ((((((((((((( ' ''' '$ $$$$$ ",
|
||||
" %%% ((((((((((((( ((((((((((((( ((((((( ((((( (((((((( (((( $$ $$$$$$ ",
|
||||
" %%% ((((((( ( ((((( (((((( ( ( ((((( ((((( (( (((( ((((( ((( (((( '' '''' $ $$$$ ",
|
||||
" %%% ((((( ((( (((( (((((( ((( ((((( (((((((((( ( ((((( ((((((((( (((( ( '''''' $$$$ ",
|
||||
" %%% ((((( ((( (((( ((((((((( (((( ((((( ( ( (((( (((((((((( ( ((((( ((( $$$$ ",
|
||||
" %%%%% (((( ( ( (((( ((((( ( (( (((( ((((( ( ( (( ((((( (((((( ( (((( ((((((())()))) $$$$ ",
|
||||
" %%% %% %( (((( (((((( (((((( ( ((( ((((((((((( ((((( ( (((((((((( ( ( ((( (((((()()()) $$$$ ",
|
||||
" %%% %%%% (( (((( ((((((((((( ((( ( ( ((((((((( ((( ( ( (((((((( ( ( (( (((())( $$$$ ",
|
||||
" %%%% %% ((( ( ((((((((( ** (( (( (((((( ( ((((((( ( ( (( ()))))) ) $$$$$$$ ",
|
||||
" %%% % %% ( ( (((((( **** +++( ((( ( ( (((( ))))))) ((( ( ((( ))) ))) $$$$$$$$$ ",
|
||||
" %%% %% (((((((( ***** +++(( ( ((( ((( (( ))))))))))))((()))(())))))) $$ $$$$$$ ",
|
||||
" %%% % % ((( ( ****** ++(+(( ((,,, ((( ( )))))))))))))(())())))))))))) $$$$$$ ",
|
||||
" %%% %%%% ((( ***** +++( (( ((,,, -- ((((( . )..))))))))))(((()))))))))))) $$ $$$$$$ ",
|
||||
" %%% %% ( (((***** +++ (( ((,,, ----.---...----------- .. .. ( ))))))))) $$ $$$$$ ",
|
||||
" %%% ((((***** +++ ,,, -----.-.-...---------- . .... ))))) $$$$ $$$$ ",
|
||||
" %%% ******* * +++ + ++,,, ------..--------------.. . )))) $ $$ $$$$ ",
|
||||
" %%% ******* * +++++ +,,, ........ . .... )))) $$$$$$ ",
|
||||
" %%% ******** *** ++++ + ++,,, ... ... ....... )))) $$$ ",
|
||||
" %%% ***** * * *** / ++++++ ++,,, . ........................ ))) $$$ ",
|
||||
" %%% ***** * * / /// +++++ ++,,, ................................ ))) $$$ ",
|
||||
" %%% %% ****** *** /////// +++ +++,,,, . ................................ ))) $$$ ",
|
||||
" %%% %%%% ***** *** / / +++ + ,,, .. . ................... ))) $$$ ",
|
||||
" %%% %%%%% ****** ///// / +++ + ,,, .. ...... ))) $$$ ",
|
||||
" %%% % % ****** //// ////// // ++++ ,,,.. ....... ))) $$$ ",
|
||||
" %%% % %% ***** /////////// / +++/ ,,, .. . ... ))) $$ $$$$ ",
|
||||
" %%% % %% ****** ///////////////// /+/// ,,,, . . ... )))$$$$$$$$$ ",
|
||||
" %%% % % ****** //////////////////// //+// ,,,,.. .. ... )))$$$ $ $$$ ",
|
||||
" %%% %% ***** *** * ////// //////// //++/ /,,,.. ...... ))) $ $$$$$ ",
|
||||
" %%% %% ************** ///// //// //+ //,, ..... 00000000000000000000000 )))) $$$$$ ",
|
||||
" %%% ******** * ***////// /////+/ /,, .... 00000000000000000000000 )))) $ $$$$ ",
|
||||
" %%% ***** ***////// ///// / /,, ... 00000000000000000000000 ))) $$ $$$$$ ",
|
||||
" %%% *** ///// //// ///,,, ... 00 00 0 ))) $ $$$ ",
|
||||
" %%% ** *** //// ///// /,,, ... 000000 ))) $$$ ",
|
||||
" %%% * /// //// ,,,, ... )))) $$$ ",
|
||||
" %%% //// ///// ... 0000 0000 )))) $$$ ",
|
||||
" %%% % //// //// ... )))0)0)0)000)))))))))))))))))))))) $$$ ",
|
||||
" %%% %% %% /// /// .. ..... ))))))))))))))))))))))))))))))))) $$$ ",
|
||||
" %%% % /// //// . ..... ))))))))))))))))))))))))))))))))))) $$$$$$ ",
|
||||
" %%% %% /// /// . ... )) ) ))))))))))) ) ))) $$$$$$$$ ",
|
||||
" %%% %% %% /// /// . .. ... )))) ) ))))) ) ))))))) $$ $$$$$ ",
|
||||
" %%% %% %% / /// /// // .. ...... ) ))) ) ) )) $$$$$$ ",
|
||||
" %%% %% %% / ////// //// // . . ..... )))) ) )) ))) ) )) )) $$ $$$$$ ",
|
||||
" %%% % % //// //// ///// // ...... )) ))))) ) ) ) ))) ))))))) $$ $$$$ ",
|
||||
" %%% / / /// ////// / .. . ...... ) ))) ) $$$$ $$$ ",
|
||||
" %%% / ////// //// / / . ............................... $ $$ $$$ ",
|
||||
" %%% / ////// //// / .............................. $$$$$ ",
|
||||
" %%% // //// /// // ............................ $$$ ",
|
||||
" %%% / /// //// /// / / . .... . .... $$$ ",
|
||||
" / //// //// // . . .. . .... $$$ ",
|
||||
" //// ///// . ",
|
||||
" //// ////// ...... . . ..... ",
|
||||
" //// ////// .... ....... ",
|
||||
" ///// ///// ",
|
||||
" //////// ////// ",
|
||||
" ///////////// /////// 11111111111111111111111111111111111111 ",
|
||||
" ////////////////////// 11111111111111111111111111111111111111 ",
|
||||
" // //////////////// / 11111111111111111111111111111111111111 ",
|
||||
" / //// //////// //// 11111111111111 1 1 ",
|
||||
" ///////////// //////// 11111111111111111111111111111111111111 ",
|
||||
" ////////////////// // / 11111111111111111111111111111111111111 ",
|
||||
" / ///////////// /// / 11111111111111111111111111111111111111 ",
|
||||
" /// // ///// // / / 11111111111111 1 1 ",
|
||||
" // //// / // 1111111 1111111 ",
|
||||
" ////// // /// 111111 11 ",
|
||||
" ///// / / / / 11 1 11 1111111 ",
|
||||
" / / / 11 11111 111 11 1 ",
|
||||
" //// / / //// 111111 11 ",
|
||||
" ///// /// 11 1 11 1111111 ",
|
||||
" / / 11 11111 111 11 1 ",
|
||||
" 11 111111 ",
|
||||
" ",
|
||||
" ",
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
"7",
|
||||
"16",
|
||||
"6",
|
||||
"2",
|
||||
"10",
|
||||
"2",
|
||||
"12",
|
||||
"14",
|
||||
"13",
|
||||
|
@ -32,28 +32,28 @@
|
|||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" !!!! ",
|
||||
" !! !! !! !! !!! ",
|
||||
" !!!! ",
|
||||
" ! ! ! ! ",
|
||||
" ! !! ! ! ",
|
||||
" ! ! ! ! !!!!! !!! ! ",
|
||||
" !!!!! !!!! ! ! ! !!! ! ! ! ",
|
||||
" !!! !!!! !! ! ! ! ! ! !!! ! ",
|
||||
" !!!!!!!!!! ! !!! !!!!!!! !! ! !!! !!!! !!! ",
|
||||
" !!!!!!!!! ! ! ! !!!!!!! !!! ! !!!!!!!! !!! ! ",
|
||||
" ! ! !!!!!! !!!!! !!! ! ! !!!!!!! !!!! ! !! !!!!! ! ! !!!!! ",
|
||||
" !!! !!!! !!! !! !! !!!!! ",
|
||||
" ! !!!!!!! !!!! !! !!! ! ! !! ! ",
|
||||
" ! !!!!!!!!! ! ! !! !!!!! !! !!!!!!! ! ",
|
||||
" !!!! !!!!!! !!!!! !! ! !!!!!!! !! !!!! !!! !!!!! !! !! ",
|
||||
" !! !!!!!! !!!!!! !! !!!! ! ! !!!!!!!!!!! !!! !!! !!!!!!!!!!! ! !! ! ! ",
|
||||
" !!! !!!! !!!!!! !!!!!!!!! !! !!!!!! !!!!! !! ! !!!!!!!!!!! !!! !!! !!! !!!! ",
|
||||
" !!! !!!! !!!!!! !!!!! !!! !!! ! ! !!!!!! !!!!! !!! ! !!!! !!!!!!!!!!! ! ! !!! !!! !!!! ",
|
||||
" ! ! !! !!!!!! !!!!! !!! ! ! !!!!!! !!!!! !!! !! ! !! !!!!! !!!!!! !! !!! ! ! !!!!!!!! ",
|
||||
" ! ! !!!!!! !!!!!!!!! ! !!! !! !!!!!! !!!!!! !!! !!! ! ! !!!!!! !!!!! ! !!! ! ! !!!!! ",
|
||||
" ! !!!!!!!!!! !!!!!! !!! !!! !!!! !!!!! !!!!!! ! !!! !!! !!!!!! !!!!! !! !!!!!!!!! ",
|
||||
" !! !!!!!! !!!!! !! ! ! !!!!!!!! !!!!! ! ! ! !!!!! !!!!! !!! !! ! !! !!!!!! ",
|
||||
" !!!! !!!!!! !!!!!!! !! !! ! !!!!!! !!!!!! !! ! !!!! !!!!!! !!!!!!!! ! ! ! !!!!! ",
|
||||
" !!!!!!! !!!!! ! !!!! !!!!!! !!!!! ! !! ! !!!!!!!!!! !!!!!! ! ! ! !!!! ! !!!!! ",
|
||||
" ! !!!!!! !!!!! ! !! !!!! !!!!!! !!!!! !!!!! !!! !! !!!!! !!!!! ! ! !! !!!!!! ",
|
||||
" !!!!!!! !!!!! !! ! ! ! !!! !!!!!! !!!!! !!! ! ! !!!!!!!!! !!!!!! !!!! !!!!! ",
|
||||
" !!!!!! !!!!!! !!! ! !! !!!!!! !!!!!! !! ! !!!!!! !!!!! !!!!! !!!!!! ",
|
||||
" !!!!!! !!!!!! !!!!!!! !!!!!!!!!! !!!!!! !!!!! !!! !!!!!! !!!!!!!! !! ! !!! !!!!!! ",
|
||||
" !!!!! !!!!!! !! ! ! ! !!!!!! !!!!! ! !!! !!!!! !!!!! !!! !!!!!! ",
|
||||
" !!!! !!!!! !!! !!! !!!!! !!!!! !!! ! !!!!!! !!!!!!!! ! !! !!!!! ",
|
||||
" !!!! !!!!! !!! !!!!! !!!!! ! ! !!!!!! !!!!!! !! !!! !!!!! ",
|
||||
" !!!!!!!!! !!!!! !!!!!! !!!!!! !!!!! !! !!!!! ",
|
||||
" !!!!!! !!!!!! !!!!! !!!!!! !!!!! !!!!!! ",
|
||||
" ! !!!!! ! ! !! !!!!!! !!!!!!!!! !! !!!!! !!!!!! !!! !!!!!! ",
|
||||
" !!!!!!!!!!! !!!!! !!!!!!!!!! !!!!!!! !!!!! ! !!!!! ",
|
||||
" !!!!!!!!!!!!!!!!! !!!!! ! !!!!!! !!!!! !!!!!! ",
|
||||
" !!!!! !!!!!! !!!!!! !!!!! !!!!!!!!!!! ",
|
||||
" !!!!!!!!!!! !!!!!!!!!! !!!!!!!! ",
|
||||
" !!!!!!!!! !!!!!!! !!!!! ",
|
||||
|
@ -62,34 +62,34 @@
|
|||
" ##### ! #### $$$ ",
|
||||
" ######## ####### ## $$$ ",
|
||||
" ########### ########## ##### # $ $$$ ",
|
||||
" ###### ####### ###### ##### ######## ### $$ $$ $$$ ",
|
||||
" ###### ###### ###### ##### ######## ### $$ $$ $$$ ",
|
||||
" ########### ##### ##### ##### ########## ##### $ $$ $$$ ",
|
||||
" ###### # ### ##### ###### ###### ##### ##### ##### $ $$$ ",
|
||||
" ###### # ###### ######### ###### ######## ###### ###### $ $$$ ",
|
||||
" ###### # ####### ####### # # ##### ########## ###### ###### $$ $ $$$ ",
|
||||
" ######### ## # ##### ###### # ### # # ##### ##### ### ##### ######## $$ $ $$$ ",
|
||||
" ####### ### ### ##### ##### # ## # ## ###### ##### # # ## ###### ###### ##### $ $$$ ",
|
||||
" ########## ## #### ###### ###### ### # ## ##### ###### ##### ###### ###### ## ### $$ $$$ ",
|
||||
" ######## # # # # ##### ######### # #### ##### ##### ### ## # ##### ###### ## ### $$$ ",
|
||||
" ###### ## ###### ####### ###### ###### ###### ###### $ $$$ ",
|
||||
" ###### ### ###### ######### ######## ####### ###### ###### $$ $ $$$ ",
|
||||
" ###### ### ## ##### ######### ## ######## ##### ##### ######## $$ $ $$$ ",
|
||||
" ########## ### ### ##### ##### ### ## ## ######### ######## # ###### ###### ##### $ $$$ ",
|
||||
" ###### ### ## # # ######## ###### # # ### ### ### ##### ######### ### # ######## ###### ## # # $$ $$$ ",
|
||||
" #### # # ## ##### ###### # ### ##### ##### # ## ## ######### ########## ### $$$ ",
|
||||
" %%% ## # ### ## ########## ##### ### ### ###### ##### ### ## ######## ###### # ### $$$ ",
|
||||
" %%% # ### ######### ######### # ## ###### ###### ### # # ## ##### ##### #### $$$ ",
|
||||
" %%% ## # # ###### ######## ### # # ###### ###### ######### ##### #### $$$ ",
|
||||
" %%% % ### ######## ######### ### #### ##### ######## ## # ###### ###### $$$ ",
|
||||
" %%%%% %% # ### ##### ###### # ### ### ##### ##### ## # # ########### $$$ ",
|
||||
" %%%%% % #### ##### ###### ### ### ###### ##### ## ## # ####### # $$$ ",
|
||||
" %%% % ##### ###### ##### ### # ########### ## # # ###### # $ $$$ ",
|
||||
" %%% % %% ### ########### # && ######## # ## &&& && ### ###### # $ $ $$$ ",
|
||||
" %%% % %%% & ### ######## && && &&& ###### # # &&&& && ### #### ### $$ $$ $$$ ",
|
||||
" %%% %%%%% &&&& ### ##&&& && && & &### ### & ### ## # $$ $$ $$$ ",
|
||||
" %%% % &&&& ### &#&& &&&& & &&&&& &&&# # &&& & # # # $$ $$ $$$ ",
|
||||
" %%% % && & && & & && & && && &&&&& && & &&&&&&& & ## $$ $$$ ",
|
||||
" %%% &&& & &&&& & & &&&&& && & & && && &&&&&&&& &&& $ $$$ ",
|
||||
" %%% &&& && &&&&&& & &&& &&&&&& & & & &&&&&&&& &&&&& &&&&&&&&&& && $$ $$ $$$ ",
|
||||
" %%% && && & &&&&&&&&& & &&&&&&&&&&&&&&& & &&&&&&&&&&&& && & && &&&& &&&&&&&&&&&&& && & $ $$$ ",
|
||||
" %%% % ### #### ## ###### ######### ## ## ##### ######## ### ### ###### ###### # # $$$ ",
|
||||
" %%%%% %% ## ## ##### ####### ## # ##### ######### ## ########### $$$ ",
|
||||
" %%%%% % ### ###### ###### ## ### ###### ######### ## ## ####### # $$$ ",
|
||||
" %%% % ######### ##### # ### ############## # ##### # $ $$$ ",
|
||||
" %%% % %% ## ############## #### & & & ######## # ## ###### ## $ $ $$$ ",
|
||||
" %%% % %%% ### ## #####&#& # &&&&& & ###### # # # && #### # ## $$ $$ $$$ ",
|
||||
" %%% %%%%% ### # ###&&& && #### #### &&&& # # # $$ $$ $$$ ",
|
||||
" %%% % #### # &#&&&& && &&&&&& # # & &&& ## ### $$ $$ $$$ ",
|
||||
" %%% % && #### & &&&& &&&&& &&&& &&&& & ## # $$ $$$ ",
|
||||
" %%% &&&&&& & # &&& &&& && & & && &&& && &&&&&&&&&& && # $ $$$ ",
|
||||
" %%% & && & & && # &&&&& &&&&&& & && &&&&&&&& && & && &&&&&&&&&& &&& $$ $$ $$$ ",
|
||||
" %%% && &&&& &&&&&&&& && & && &&&&&&&&&& && & &&&&&&&&&&&& &&& & & &&&&&&&&&&&&&&&& $ $$$ ",
|
||||
" %%% & & & &&&&&&&&&&& && && &&&&&&&&&&&&& & &&& &&& &&&&&&&&&&&&&& & & &&&&&&&&&&&& &&&&&& & $$$ ",
|
||||
" %%% &&& &&&&&&&&&&&&&& & & &&&&&&& &&&&&& & && && &&&&&&& &&&&&&&& & &&& &&&&&& &&&&& & && $$$$ ",
|
||||
" %%% &&& &&&&&&& &&&&& &&& & &&&&&&& &&&&& & &&& & &&&&&& &&&&&&&& & &&&&& &&&&&&&&&& $$$$ ",
|
||||
" %%% %% &&&&&&& &&&& &&&& & &&&&&& &&&&&& && &&& &&&&& &&&&&& & &&& &&&&& &&&& && $$$$ ",
|
||||
" %%% %%%% &&&&&& &&&&& & && &&&&& &&&&& & &&&&&&&&&& &&&& &&& &&&&&&& &&&& & & $$$$ ",
|
||||
" %%% &&&&&&&&&&&&&&&&&& && && && &&&&&&& &&&&&& && & & & &&&&&&& &&&&& &&& & && &&&&&& &&&&& &&&&& $$$$ ",
|
||||
" %%% & &&&&&&& &&&&& &&&& &&& && &&&&&&& &&&&&& & & & &&& &&&&&& &&&&& & &&&&&& && &&&&& &&&&& &&&&& $$$$ ",
|
||||
" %%% %% &&&&&& &&&& && &&& &&&&&&&&& &&&&&&& && && &&&&& &&&&&&&& & &&&&& &&&& & & $$$$ ",
|
||||
" %%% %%%% &&&&&& &&&&&&& && &&&&&&&&& &&&&&&& & &&&&&& &&&& && &&&&&& &&&& &&& &&& $$$$ ",
|
||||
" %%% %%%%%&&&&& &&&& & &&& &&&&& &&&& && &&&&& &&&& && && &&&&& &&&& &&& & && $$$$$$ ",
|
||||
" %%% % %&&&&& &&&& && && &&&&& &&&& & &&&&& &&&&&& &&&&& &&&&& &&&&&&&&& $$ $$$$$$ ",
|
||||
" %%% % %% &&& &&&& && &&&&&& &&&& & &&&&& &&&&& &&&&&& &&&&&&&&&&&&&& $ $$$$$$ ",
|
||||
|
@ -108,89 +108,89 @@
|
|||
" %%% % %% ''''''''''''''''''''''''' $$$$ ",
|
||||
" %%% % %% (( '''''''''''''''''''''''''$ $ $$$$ ",
|
||||
" %%% %% ((((((( (((((((( '''''''''''''''''''''''''$$ $$$$$$ ",
|
||||
" %%% %% %% (((((( (((((((( (((((((((( (((((((((((( ' ''' $$ $$$$$$ ",
|
||||
" %%% % %% (((((((((( (((((((((((( ((((((((((((( (((((((((((((( ' ''' $ $$$$$$ ",
|
||||
" %%% %% %% (((((( (((((((( (((((((((( (((((((((((( '' '''' ' ''' $$ $$$$$$ ",
|
||||
" %%% % %% (((((((((( (((((((((((( ((((((((((((( (((((((((((((( ' '''' ' ''' $ $$$$$$ ",
|
||||
" %%% %% % (((((((((((((( ((((((((((((((( (((((((( ((((( ((((((( ( ( (((( ' ' ' ' ' $$$$$$ ",
|
||||
" %%% ((((((( (((((( ((((((( ((( (((( (((((( (( (((((( (((((( ((((((( ' ' ' ''' $$$$$ ",
|
||||
" %%% ((((((( ( (((( (((((( (((((( (((( (((((( (((( (((( ((((( (( (((( ' ' ''' $$ $$$$$$ ",
|
||||
" %%% ((((((( (((((( ((((((( (((( (((((( ((((( (((( (((((( ( (((((((( ' '''' '''''' ' $$$$$ ",
|
||||
" %%% ((((((( ((((( ((((((((( (((( (((((( ((((( (((( ((((( ((( (((( ''''''' '' ''''''$$ $$$$$$ ",
|
||||
" %%% (((((( ((((((( (((((( ((( (((( ((((( ((((( ((((( ((( (( ((((( $ $$$$ ",
|
||||
" %%% (((((((((( ( (((( ((((( (( (((( (((((( ((( (((( ((((((((( (( (((((( (( $$$$ ",
|
||||
" %%% ((((((((( (((( ((((( ((((( (( (( (((( ((((( ( ((( (((( (((((((((( (( ( ((((((( (((( $$$$ ",
|
||||
" %%% (((( ( ((( (( (((( (((((( ((( (( (((( ((((((( ( (( (((( (((((((( ( ((( ((( ( ((((( (((((( $$$$ ",
|
||||
" %%% %% (( (((( ( ((((( (((((( ( ((((( (((((( (( ( ( (((((((((((((( ( (( (( ((((((((((((( $$$$ ",
|
||||
" %%% % %% ((( ((((((((( (((((( ( (((((((((((((( (((( ( (((((((((((( (((( (( ((((((((( $$$$ ",
|
||||
" %%% %% (( ((((((((((((( (((((((((((( (( (( ((((((((( ((( ((( (((((( (( $$$$$$ ",
|
||||
" %%% %% % ( (((((((( ((( )) (((((((((( (( ( (( ((( ( ((( (((((( * $$ $$$$$$ ",
|
||||
" %%%%% % (( ( ((((( ( (((() +++ (((( ( ((( ,, (((((( ((( (( ( (( ** ** * $$ $$$$$$ ",
|
||||
" %%%% % %% (( ( ())()) +++ (( ((( ,,, ,, ((((( ************ (( ( * * ** $$$$$$ ",
|
||||
" %%%%% ((( ( ((())) +++ ( ( ( ((( ( ***************************((((( *** * *** $ $$$$$$ ",
|
||||
" %%%% % % ((((( (()())) ++++ ( (((((--- ,,,,,,,, (( ((((( **************************((*(******* ******* $$ $ $$$$ ",
|
||||
" %%%%%% ((( ()))) ++++ ((( ((--- ,,, ,,,,, ( ((( ********************************* * * $$ $ $$$$ ",
|
||||
" %%%% )))))) ) +++ (--- ,,,,,, **************** $ $$$$ ",
|
||||
" %%%% ))))))))) ) +++ ---- ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ****** $$$$$$ ",
|
||||
" %%%% ))))) ))) )) +++ ----- -- ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, . .. **** $$$$ ",
|
||||
" %%%% )))))) ))) )) +++ --- -- - ,,,,,,,,,,,,,,,,,,....,..,,,, .. ... . **** $$$$ ",
|
||||
" %%%% )))))) ) ))) ++++++ + ------ - . ... ... .. . .... **** $$$$ ",
|
||||
" %%%% ))))) ) ++++ ++ + --- - ... ... .. . .. . .. **** $$$$ ",
|
||||
" %%%%% )))))) )) +++++++ ----- -- . .. ..... ... ..... **** $$$$ ",
|
||||
" %%%%%% )))))) ) ++++ ++ ---- -- .. ..... ... . . . *** $$$$ ",
|
||||
" %%%% %% ))))) +++ + + ----- -- . .. ................................. *** $$$$ ",
|
||||
" %%%%%% % )))))) / +++ + ++ ---- -- .......................................... *** $ $ $$$$ ",
|
||||
" %%%%%% )))))))) // //// // ++++++ ++ --- -- ........................................... *** $$ $$$$ ",
|
||||
" %%%%%%%%% ))))) ))) ///// //// ++++++++ --- ................. *** $$ $ $$$$ ",
|
||||
" %%%%%% %% )))))) ))) )) // // // ++++++ --- ..... *** $ $$$$$$ ",
|
||||
" %%%%%%%%% )))))) )) ) ) /// /// // // +++ --- .... *** $$$$$$ ",
|
||||
" %%%%%% ))))) )) ) // //// ///// / +++ ---- . ... *** $$$$$ ",
|
||||
" %%%% )))))) ) )) //////// /// / +++ ---- . . ... *** $$ $$$$$$ ",
|
||||
" %%%% )))))) ))) /////////////// / +++ ---- .. . .... *** $ $$$$ ",
|
||||
" %%%% ))))) ) ////////////////////// ++++ --- . . .... *** $$$$ ",
|
||||
" %%%% )))))) ////// ////////////// ++++ --- .. ..... *** $$$$ ",
|
||||
" %%%% )))))) ////// ///////// +/+ --- . ..... **** $$$$ ",
|
||||
" %%%% %% ))))) ) ///// //// /++/ --- ... ..... **** $$$$ ",
|
||||
" %%%% %%%% ))))))))) ) ////// ///////++// ---- . ... 00000000000000000000000000000 **** $$$$ ",
|
||||
" %%%%%% %)))))))) )) ////// //// /++////---- . ... 00000000000000000000000000000 *** $$$$$$ ",
|
||||
" %%%%%% %%)))) ))) )) ///// //// / / --- ... 00000000000000000000000000000 *** $$$$$$$$$ ",
|
||||
" %%%%%% )%))) ) ) )) ////// //// // /--- ... 00 00 0 0000 *** $$ $$$$$$ ",
|
||||
" %%%% % %%%) ) ) ////// /////// --- ... 000000 0 00 *** $$$$$$$ ",
|
||||
" %%% %) ))) ///////// //// // --- ... **** $ $$$$$$ ",
|
||||
" %%%% % ) //////// //// / --- ... 00000000 00 00000 ****** **$$ $ $$$$ ",
|
||||
" %%% / / /// //// --- ... 00 0000 000000 *** ** *$$ $ $$$$ ",
|
||||
" %%% // // /// ///// ... ***** * $ $$$$ ",
|
||||
" %%% / / /// //// ... **************** **** * * $$$$$$ ",
|
||||
" %%% // / //// /// . ... ********************************************** ** $$$$ ",
|
||||
" %%% // // //// /// .. ..... ******************************************** * * $$$$ ",
|
||||
" %%% // /// //// ..... ********************************* * ** $$$$ ",
|
||||
" %%% ////// //// . ... * * *** ** ** *** ** $$$$ ",
|
||||
" %%%%% /// //// .. ..... * **** * **** ** *** $$$$ ",
|
||||
" %%% %% % /// /// / ......... ** * * $$$$ ",
|
||||
" %%% %%%%% //// /// // .. .. .... **** * ****** ***** ** $$$$ ",
|
||||
" %%%% %% /////// ///// / . ..... ** * *** ** * ******* $ $ $$$$ ",
|
||||
" %%%%% %% //////// ///// // . .... $$ $$$$ ",
|
||||
" %%%%%% // ///// ///// // ..... $$ $ $$$$ ",
|
||||
" %%%%% %% // / /// //// / ...... $ $$$$$$ ",
|
||||
" %%% ((((( (( (((( ((((((((( ( ( (((( (((((( ( (( (((( (((((((( (((((( (((( (( $$$$ ",
|
||||
" %%% ((((( ((( ( (((( ((((((((( (( ( ((((( ((((( ( (((((((( (((( ((((((((( ( ( (((( (((( (((( $$$$ ",
|
||||
" %%% (((( (( (( (((( (((((( ( (((( (( ((((((( ((((((( ( ( ( ( (((( (((((( ((( ( ((( ((((( (((((( $$$$ ",
|
||||
" %%% %% (( (((( ((((( (((((( (( ( (( (((((((( (((((( (( (((((((((((((( (( ((( ( ((((((((((((( $$$$ ",
|
||||
" %%% % %% (( (((((( (((((( ((( ( (( (((((((((((((( ((( (((((((((((((( (( ( ((((((((( ) $$$$ ",
|
||||
" %%% %% (( ((((((((((( ( ((( (( (((((((((((( (( (( ( (((((((( ( (( (((((( )) ) $$$$$$ ",
|
||||
" %%% %% % ( (((((((( ((( (** (( (( ((((((( (( (((( (( ((( ( (( (( (( ( ))))) $$ $$$$$$ ",
|
||||
" %%%%% % (((( (((( ((** +++ ( ( ((( ,, ((( (( ((((( )) ) $$ $$$$$$ ",
|
||||
" %%%% % %% (( ((**** +++ ( ((( ,,, ,, (((( ( )))))))))))) ((( (( ))) )) $$$$$$ ",
|
||||
" %%%%% ( (((((*** +++ ( ( ( )))))))))))))))))))))((((((()))) ) ))) $ $$$$$$ ",
|
||||
" %%%% % % (((((**** ++++ --- ,,,,,,,, ( ))))))))))))))))))))))((((()(())))))) ))) $$ $ $$$$ ",
|
||||
" %%%%%% (***** ++++ --- ,,, ,,,,, ))))))))))))))))))))))))))))))))) ) $$ $ $$$$ ",
|
||||
" %%%% ****** * +++ --- ,,,,,, ))))))))))))))) ) $ $$$$ ",
|
||||
" %%%% ********* * +++ ---- ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, )))))) ) ) $$$$$$ ",
|
||||
" %%%% ***** *** ** +++ ----- -- ,,,,,,,,,,,,,,,,,,,,,,.,,.,,, . )))) )) ) $$$$ ",
|
||||
" %%%% ****** *** ** +++ --- -- - ,,,,,,,.,,,,.,,,,,,,,......., .... .. )))) )) )) $$$$ ",
|
||||
" %%%% ****** * *** ++++++ + ------ - .... .. ...... ... . ))))) ))) $$$$ ",
|
||||
" %%%% ***** * ++++ ++ + --- - ..... . . .. .. .. )))) )) )) $$$$ ",
|
||||
" %%%%% ****** ** +++++++ ----- -- .. . .. . ..... ... ... ))))))))) $$$$ ",
|
||||
" %%%%%% ****** * ++++ ++ ---- -- ..... .. ...... . . ))))) $$$$ ",
|
||||
" %%%% %% ***** +++ + + ----- -- ... ................................. )))))) $$$$ ",
|
||||
" %%%%%% % ****** / / +++ + ++ ---- -- .......................................... )))))) $ $ $$$$ ",
|
||||
" %%%%%% ******** // //// / ++++++ ++ --- -- ........................................... ))) $$ $$$$ ",
|
||||
" %%%%%%%%% ***** *** /// /// / ++++++++ --- ................. ))) $$ $ $$$$ ",
|
||||
" %%%%%% %% ****** *** ** // / // / ++++++ --- ..... ))) $ $$$$$$ ",
|
||||
" %%%%%%%%% ****** ** * * /// / /// // / +++ --- .... ))) $$$$$$ ",
|
||||
" %%%%%% ***** ** * // //// / //// / +++ ---- . ... ))) $$$$$ ",
|
||||
" %%%% ****** * ** //////// / /// +++ ---- . .. ... ))) $$ $$$$$$ ",
|
||||
" %%%% ****** *** /////////////// / +++ ---- . ...... ))) $ $$$$ ",
|
||||
" %%%% ***** * ////////////////////// ++++ --- .......... ))) $$$$ ",
|
||||
" %%%% ****** ////// ////////////// ++++ --- .. ..... ))) $$$$ ",
|
||||
" %%%% ****** ////// ///////// ++/ --- .. .... )))) $$$$ ",
|
||||
" %%%% %% ***** * ///// //// /+/// --- .... ... )))) $$$$ ",
|
||||
" %%%% %%%% ********* * ////// ////////+// ---- ......... 00000000000000000000000000000 )))) $$$$ ",
|
||||
" %%%%%% %******** ** ////// //// //+// /---- . ... 00000000000000000000000000000 ))) $$$$$$ ",
|
||||
" %%%%%% %%**** *** ** ///// //// // / /--- ... 00000000000000000000000000000 ))) $$$$$$$$$ ",
|
||||
" %%%%%% *%*** * * ** ////// /////// /--- ... 00 00 0 0000 ))) $$ $$$$$$ ",
|
||||
" %%%% % %%%* * * / ////// ///// / //--- ... 000000 0 00 ))) $$$$$$$ ",
|
||||
" %%% %* *** //// //// //// /// --- ... )))) $ $$$$$$ ",
|
||||
" %%%% % * // //// ///// / --- ... 00000000 00 00000 )))) ) $$ $ $$$$ ",
|
||||
" %%% // // /// //// --- ... 00 0000 000000 ))) ) )$$ $ $$$$ ",
|
||||
" %%% // // /// ///// . ... ))))) ) $ $$$$ ",
|
||||
" %%% / // /// //// ........ )))))))))))))))) )))) )) $$$$$$ ",
|
||||
" %%% / ///// /// . .... )))))))))))))))))))))))))))))))))))))))))))))) ) $$$$ ",
|
||||
" %%% ////////// /// .. . ... )))))))))))))))))))))))))))))))))))))))))))) ) ) $$$$ ",
|
||||
" %%% //// //// .. .... ) )))))))))))))))))))))))))))))))))) ))))) $$$$ ",
|
||||
" %%% /// //// .. ..... ))))))) ))) ) ) )))) ) ) $$$$ ",
|
||||
" %%%%% /// //// .. . .... )) ))) )) )) ) )))) ) $$$$ ",
|
||||
" %%% %% % /// /// / / . . .... ) ) ) $$$$ ",
|
||||
" %%% %%%%% //// /// / / . .... ))) )) ) )))))))) ) )))) $$$$ ",
|
||||
" %%%% %% / ///// /// / // ..... )))) )) ))))) )))))))) $ $ $$$$ ",
|
||||
" %%%%% %% // //// //// / .... $$ $$$$ ",
|
||||
" %%%%%% //// /// ////// // ..... $$ $ $$$$ ",
|
||||
" %%%%% %% // /// ////// // ...... $ $$$$$$ ",
|
||||
" %%%%%%%% // / /// /// / // .......................................... $$$$$$ ",
|
||||
" %%%%%% // ///// /// //// ......................................... $$$$$ ",
|
||||
" %%% / // //// /// / . .. ...................................... $$ $$$$$$ ",
|
||||
" %%% / // //// /// .. . . . . .. . $ $$$$ ",
|
||||
" %%%%%% // / //// /// // ........................................ $$$$$ ",
|
||||
" %%% / /// //// /// ........................................ $$ $$$$$$ ",
|
||||
" %%% / / //// /// . . . . .. .. . $ $$$$ ",
|
||||
" %%% / //// /// .. .. ... .. ...... $$$$ ",
|
||||
" //// //// ... . $$$$ ",
|
||||
" //// ///// ..... .. . . . . ..... $$$$ ",
|
||||
" ///// ///// ... .... ... .... ",
|
||||
" //// //// ... .. $$$$ ",
|
||||
" //// ///// ...... ........ .... .... $$$$ ",
|
||||
" ///// ///// . .. ..... . . . .. ",
|
||||
" //// ////// ",
|
||||
" //// /////// ",
|
||||
" //// ///// ",
|
||||
" ///// /////// / / ",
|
||||
" //// ///// / ",
|
||||
" /////// ///////// // ",
|
||||
" // / ///// ///////// //// ",
|
||||
" / / /////////// ///// / / // ",
|
||||
" /// ////////////////////////// //// 11111111111111111111111111111111111111111111111111 ",
|
||||
" // // //////////////////// //// 11111111111111111111111111111111111111111111111111 ",
|
||||
" / / //////////////////// /// 11111111111111111111111111111111111111111111111111 ",
|
||||
" // / //////////// / / 11111111111111111111111111111111111111111111111111 ",
|
||||
" //// / ///// 1111111111 1 1 1111 ",
|
||||
" / /// // /// 1111111 1 1 1 1 11 ",
|
||||
" /// ///// 111 11 1 1 ",
|
||||
" /// /////// 1111111 1 1 1 1 11 ",
|
||||
" / // 111 11 1 1 ",
|
||||
" /// / / 11 1 11 11111 1 11111 ",
|
||||
" ////// / 11 11111 111 11 1 111111 ",
|
||||
" ////// 1 111111 ",
|
||||
" // 1 111111 ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"1"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ",
|
||||
" !! ",
|
||||
" ! !!! ",
|
||||
" ! ",
|
||||
" ! !!! ! ",
|
||||
" ! ! ! !! ",
|
||||
" ! !! ! ! ",
|
||||
" ! ! !! ",
|
||||
" ! ! !!!! !! !!!! !!",
|
||||
" !! ! !! !! ! !!!",
|
||||
" ! !! !!! ! !!!! !! ! !!!",
|
||||
" ! !! !!!! !! ! !! !! ! ",
|
||||
" ! ! !! ! !! !! ! !! ! ",
|
||||
" ! ! ! !! ! ! !! ! ",
|
||||
" !! !! !! !! ! ! !!!",
|
||||
" ! !! ! ! !",
|
||||
" ! ! ! ! ! ! !",
|
||||
" ! !! ! ! ! !! !! ! ",
|
||||
" ! ! ! ! ! ! !! ! !!! ",
|
||||
" !! !! ! ! !! !! !! !! ! ",
|
||||
" !!!! !! ! !! !! !! !! ",
|
||||
" !! ! ! ! ! !! ! ",
|
||||
" !! !! !!!! !! ",
|
||||
" ! !! !!! ! !! ! ! ! ! ",
|
||||
" ! ! ! !! ! ! ! ",
|
||||
" ! ! ! ! ! !! !! ! ! ! ",
|
||||
" !! !! ! ! !! ! ",
|
||||
" ! ! !! ",
|
||||
" ! ! !! ! !! ! ! ",
|
||||
" ! !! ! ! ! ! ! ! !! ",
|
||||
" ! !! ! ! !! !! !! ! ",
|
||||
" ! !! !! !! !! ! ! !! ! ",
|
||||
" !!! ! ! ! !! ! ",
|
||||
" ! ! !! ! ",
|
||||
" ! ! ! ! ! ! ! ",
|
||||
" ! ! !! !! ! ",
|
||||
" !!!!! ! ! !! ! !!! ! ! ",
|
||||
" ! !! ! ! !! ! ! !! ! ! ! ",
|
||||
" !! !! ! !! !! !! !! ",
|
||||
" !! !! ! !! !!!! !!! !!! ",
|
||||
" !!! !! !! ! ! ",
|
||||
" ! ! ! ! !! ! !!! ! ! ",
|
||||
" !! !! ! ! ! ! ! ! ",
|
||||
" ! ! ! !! ",
|
||||
" ! ! ! !! ! !! ! ",
|
||||
" ! ! ! !!! ! ! ! ",
|
||||
" ! ! ! ",
|
||||
" ! ! ! ",
|
||||
" ! !!! ! ",
|
||||
" !! "
|
||||
]
|
||||
}
|
109
tests/visual_tests/grids/lines-7-400-400-1.0-grid-reference.json
Normal file
|
@ -0,0 +1,109 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"1"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ! ",
|
||||
" ! ! ",
|
||||
" !! ! ",
|
||||
" ! !!!! ! ",
|
||||
" !! ! ! ! ",
|
||||
" !! ! !! !!! ! ",
|
||||
" ! ! !! ! !!! !! ! ! ! ",
|
||||
" !! ! !!!!! !! ! !! !! !! ",
|
||||
" !! ! ! !!!! ! ! ! ! !! !! ",
|
||||
" !! !! ! !!! ! !! ! !! !! ! ",
|
||||
" !!!!! ! ! ! ! !! ! !! ! ",
|
||||
" ! !! ! ! !! ! ",
|
||||
" !! !! ! !!! ! !!!!! ! ",
|
||||
" ! ! !! !! ! !!! ",
|
||||
" ! ! !! ! ! ! ! ! ! ! ! ",
|
||||
" ! ! !! ! ! ! ! ! ",
|
||||
" ! ! ! !! ! ! !! ! ",
|
||||
" ! !! ! !! !! ! ! !! ! ",
|
||||
" ! ! ! !! ! ! !! !! ",
|
||||
" !! ! !! ! !! ",
|
||||
" ! !! !! ! ! ! ",
|
||||
" ! !! !! ! ! ! ",
|
||||
" !! !! ! ! ",
|
||||
" !! ! ! !! !! !! ! !! ! ",
|
||||
" !!!!! ! ! ! ! ! !! ! ",
|
||||
" ! !! !! !!!! !! !! !! !! ",
|
||||
" ! ! ! !!!! ! ",
|
||||
" !! ! ! ! ! !! ! ",
|
||||
" ! ! !! ! ! ! !! !! ! ",
|
||||
" !! !! ! !! ! ",
|
||||
" ! ! ! !! !!!!! ! ! ",
|
||||
" ! !! ! ! ! !! ! ",
|
||||
" ! ! ! !! !! !! !! ! ",
|
||||
" ! ! ! ! ! !! ! !! !! ! ",
|
||||
" ! ! ! !! !! !!! ",
|
||||
" ! ! ! ! !! !! ",
|
||||
" ! !! ! ! ! ! !!! ",
|
||||
" !! ! !!! ! ! ! !! ! ",
|
||||
" !! ! !! ! ! ! ! ! ",
|
||||
" !! !! ! ! !! !! ! ! ! ",
|
||||
" ! ! !! !! !! ! ",
|
||||
" !! ! ! !! ! !! ",
|
||||
" !!! ! !!!! !! ! !! ",
|
||||
" ! ! ! ! ! !! ! !! !! !! ",
|
||||
" !! !! ! !! ! !! !! ",
|
||||
" !!! !! ! ! ! !! !! !! !! ! ",
|
||||
" !! !! !! !! ! ! !! ! ",
|
||||
" !! !! ! ! ! ! ",
|
||||
" ! !!! ! ! !! ! !!! ! ",
|
||||
" ! ! ! ! ! ! ! ! ! ! ",
|
||||
" ! ! ! ! !! !! !! ! ",
|
||||
" ! ! ! !! !! ! !!! !! ! ",
|
||||
" ! ! ! !! !! ",
|
||||
" ! ! !! ! !! ",
|
||||
" ! ! !! ! ! ! ! ! !!! ",
|
||||
" !! ! !!! ! ! ! ! ! ! ",
|
||||
" ! ! !!! !!! ! ! ! ",
|
||||
" !! !! ! !! !! !! ! ",
|
||||
" !! !! ! !! !! ",
|
||||
" !! ! !! ! ! !! ",
|
||||
" !!! ! !! !! !! !! ! ",
|
||||
" ! ! ! !! !! !! !! ",
|
||||
" ! ! ! ! ! !! ! ! ! ! ",
|
||||
" !! !! ! ! ! !! ! ",
|
||||
" !! !! !!! ! ! ! ! ! ",
|
||||
" !! !! ! ! ! !! !! !! ! ",
|
||||
" ! ! ! ! ! ! !! ! ",
|
||||
" ! ! ! ! ",
|
||||
" !! !! ! ! ! ! ! ",
|
||||
" ! !! !! ! ",
|
||||
" ! ! ! ! ! ! ! !! ",
|
||||
" !! !! ! ! ! ! ! !! ",
|
||||
" !! !! ! ! ! ! !! !!! ",
|
||||
" !! ! !! ! !! ! ! ! ! ",
|
||||
" ! !! ! ! !! ! ",
|
||||
" ! ! !! !!!! !! ! ! ",
|
||||
" ! !!! ! !! !! ! ",
|
||||
" !! ! ! !! ! ! !! !! ",
|
||||
" ! ! !!!! ! ! ! ! ! !! ! ",
|
||||
" ! !! ! ! !! ! ! !! !! ",
|
||||
" !! !! ! ! ! ! ! ! !! ! !! ",
|
||||
" !! !! ! ! ! !! !!!! ! ! ! ",
|
||||
" !! !! ! ! ! !! !!! ! ",
|
||||
" !! ! ! ! !! ! ! ! ! ! ! ",
|
||||
" ! ! ! ! !!! ! ",
|
||||
" !! ! ! ! !! ",
|
||||
" ! ! !!!!!! ! ! ",
|
||||
" ! ! !! ! ",
|
||||
" ! !!!! ",
|
||||
" !! !!! ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "
|
||||
]
|
||||
}
|
159
tests/visual_tests/grids/lines-7-600-600-1.0-grid-reference.json
Normal file
|
@ -0,0 +1,159 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"1"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" !! !!! ",
|
||||
" !! !! !! ",
|
||||
" ! ! ",
|
||||
" ! !!! ! ! ! ",
|
||||
" ! ! ! !! !! ! ! !! ! ",
|
||||
" ! ! ! !!! ! ! !! ! ",
|
||||
" ! ! ! !! ! ! !! !! !! ",
|
||||
" ! !! ! !! ! ! !! ! ",
|
||||
" ! !! ! ! ! ! ! ! ! ",
|
||||
" !!! !! !! !! !! ! ! ",
|
||||
" ! ! !! ! !! !!! ! ",
|
||||
" ! ! !! !! ! ! !!!!! ! ",
|
||||
" !! ! ! !! ! ! ! ! ! ! ",
|
||||
" ! ! ! ! !!! ! !! ! ! !! ! ",
|
||||
" ! !! ! ! !! !! !! ! ",
|
||||
" ! !!!! ! !!!! ! !! ! ",
|
||||
" ! ! ! ! ! ! ! !! ! ",
|
||||
" !!! !! ! ! ! ! !!!! !! ! ",
|
||||
" ! !!! ! ! ! ! !! !! ",
|
||||
" ! !!! ! ! ! !! !! ",
|
||||
" ! !! !! ! !! ! ! ! ",
|
||||
" ! !! ! !! ! ! ! ! ",
|
||||
" ! !! ! ! !! ! ",
|
||||
" ! ! ! ! ! ! !! ! ",
|
||||
" ! ! ! ! !! !! !! ",
|
||||
" !! ! ! ! !! ",
|
||||
" ! !! ! ! !! ! ! ! ! ",
|
||||
" !!! !!! !! !! ! ! ",
|
||||
" !! ! ! !! ! ! ",
|
||||
" ! ! ! !! !! ! ! !!!!! ",
|
||||
" ! !! !! ! !! ! !! ! ",
|
||||
" !! ! ! ! ! !!!!! !! !! ! ",
|
||||
" !!! ! ! ! !!! !! ! ",
|
||||
" ! ! ! ! ! ! !! !! ",
|
||||
" !!! !! ! ! ! !! ! ! !! !! ",
|
||||
" ! !!! ! ! !! ! !! ",
|
||||
" !! !! ! ! !! !! ! ! ! ",
|
||||
" ! !! !! !! !! ! ! ! ",
|
||||
" ! ! !! ! !! ! ! ! ! ",
|
||||
" ! ! ! ! ! ! !! ! ",
|
||||
" ! !! ! ! ",
|
||||
" ! ! ! !! !! !! ",
|
||||
" !! !! ! ! !! ! !!! !! ",
|
||||
" !! !! ! ! ! ! ! ! ",
|
||||
" !!! ! !! !! !! ! ! ! ! ! ",
|
||||
" ! !!!!! ! ! !! ! ",
|
||||
" ! ! ! !!!!! ! ",
|
||||
" ! !! ! ! ! ! !! ! !! !! ",
|
||||
" !!! !! ! ! !!!! ! ",
|
||||
" ! !!! !! ! ! ",
|
||||
" ! ! ! ! !! !!!! ! ",
|
||||
" ! ! ! ! !! !! ! !! ! ",
|
||||
" ! !!! ! ! !! !! ! !! !! ",
|
||||
" ! !! !!! !!! !! ! ! !! ! ",
|
||||
" !! !! !! ! ",
|
||||
" ! !! ! ! ! ",
|
||||
" ! ! ! ",
|
||||
" ! ! ! ! ! ! !! ",
|
||||
" ! ! ! ! ! ! !! ! ",
|
||||
" ! !! ! ! !! !! !! !! !! ",
|
||||
" ! !! !! !! !! !! ! !! ",
|
||||
" ! !! ! ! !! ! ! ",
|
||||
" ! ! ! ! !!!! !! ! ",
|
||||
" ! !! ! ! !! ! !! ! ",
|
||||
" !! !! ! !! ! !!!! ! ",
|
||||
" ! ! !! ! ! ! !! !! !! !! ! ",
|
||||
" !! !! !! ! ! !! ! ",
|
||||
" ! !!!! ",
|
||||
" ! ! ! ! ! !! ! !! !!! ",
|
||||
" !! !! ! ! ! ! ! !! !! ",
|
||||
" !! ! !! ! !! ! !! !!! ",
|
||||
" !! ! ! !! !! ! ! ! ! ",
|
||||
" ! ! ! ! ",
|
||||
" ! ! ",
|
||||
" ! ! ! ! ",
|
||||
" ! ! ! ! !! ! ! ! ! ",
|
||||
" ! ! ! ! !! ! !! !! ",
|
||||
" !! !! ! !! !! ! !!!! !!! ",
|
||||
" !! !! !! !!! ! ! ",
|
||||
" !!!! !! !! ! ! ",
|
||||
" !! ! ! !! !! ! ! ! ! ",
|
||||
" ! ! ! ! !! !! !!!!! ! ",
|
||||
" ! !! ! ! ! ! ! !! !! !! ",
|
||||
" !!! !! ! !!! !! !! ! ",
|
||||
" !! !!!!! ! ! ! ! ! ! ",
|
||||
" ! ! ! ! !! !! !! ! ",
|
||||
" ! ! !! !! !! !! !! !! ",
|
||||
" !!!! ! !! ! ! !! !! ",
|
||||
" ! !! !! ! ! ! !! ",
|
||||
" ! !! !! ! ! ",
|
||||
" ! !! !! ! ! ! ! ",
|
||||
" ! ! ! ! ! ! ! ! ",
|
||||
" ! ! !! ! !! ! ",
|
||||
" !!!!!! !! ! ",
|
||||
" !! !! ! ! ! !! !!! ",
|
||||
" ! ! !! ! ! !! ! !! ",
|
||||
" ! !! !! ! ! ! !! ! ",
|
||||
" ! !! !! ! ! !! !!! ! ",
|
||||
" !! !! ! ! !! !!!! ! ",
|
||||
" !! !! ! ! !! ! !! !! ! !! ",
|
||||
" ! ! ! !! ! ! !! ! ",
|
||||
" !!! ! ! ! ! ",
|
||||
" ! ! ! !!! ! !! !! ! ! ",
|
||||
" ! !! ! !! !! !! !! ",
|
||||
" ! ! ! ! !! !! ! !! !! ",
|
||||
" !! !! !! !! ! ! !! ! ",
|
||||
" ! !! ! ! ! ! ! ! ",
|
||||
" ! !! !! ! ! ! ",
|
||||
" ! ! ! ! ! ",
|
||||
" ! !! ! ! ! !! ! ",
|
||||
" ! ! !! ! ! ! ! ",
|
||||
" !! ! !! ! ! ! !! ",
|
||||
" ! !! ! !!!! ! !! ! !!! ",
|
||||
" ! !! !! !! !!! ! !! ",
|
||||
" !! ! !!! ! ! ! ! !! ! ! ",
|
||||
" !! ! !!! ! !! ! !!!! ! ! ",
|
||||
" ! ! ! ! ! !! ! ! ",
|
||||
" ! ! ! !! !!! ! ! !! ! ! ",
|
||||
" !! ! ! !! !! !! ! ",
|
||||
" !!!! ! !! ! ! ! !! ! ! ",
|
||||
" ! ! ! !!! !! ! ! ! ! ! ",
|
||||
" ! ! ! ! !! ! !! !!! !! !!! ",
|
||||
" !! !! ! ! ! !! ! ! !! ",
|
||||
" !! !! !! !! ! ! ! ! ",
|
||||
" !! !! !! ! ! ! !!! !! ! ",
|
||||
" ! ! ! !! ! ! !!!! ! ",
|
||||
" ! ! ! ! ",
|
||||
" !! ! !! !! ! ",
|
||||
" !! !! !! ! ",
|
||||
" !! ! !!! ",
|
||||
" !! !!!! ",
|
||||
" ",
|
||||
" !!! ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "
|
||||
]
|
||||
}
|
209
tests/visual_tests/grids/lines-7-800-800-1.0-grid-reference.json
Normal file
|
@ -0,0 +1,209 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"1"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" !!! !! ! ",
|
||||
" !! !!! ",
|
||||
" !!! !! !! ",
|
||||
" ! ! !! !!!!!! ! ! ! ! ",
|
||||
" ! ! !!! !! ! ! !! ! ",
|
||||
" ! ! ! ! ! ! ! ! !! !! !! ! ",
|
||||
" !! !! !!!!! ! !! ! !! !! ! ",
|
||||
" ! !!! !!! ! !!! ! !!!!! ! ",
|
||||
" !! ! !! ! ! ! ! ! ! !! ! ",
|
||||
" !!! ! ! ! ! ! !! !! ! ",
|
||||
" !! ! ! ! ! ! ! !!! ! ",
|
||||
" !! !! ! ! !!!! ! ! ",
|
||||
" ! !! !! ! !! ! ! ! !! ! ",
|
||||
" ! ! ! !! ! !! !! ! ",
|
||||
" ! ! ! ! ! ! !! !! ! ",
|
||||
" ! ! !! ! ! !!!!! ! ",
|
||||
" !! !! ! ! ! ! !! ! ",
|
||||
" !! !! ! !! ! ! ! !! ! ",
|
||||
" ! !! ! !! ! !! ! ! ",
|
||||
" !!!! !!! !! ! ! ! ! ",
|
||||
" !! !!!! ! ! ! ",
|
||||
" ! ! ! ! ! ! ! ! ! ",
|
||||
" ! !! ! !! ! !! ! !! !! ! ",
|
||||
" ! ! ! ! !! ! !! ! ",
|
||||
" !! !! !!! ! ! !! !!! ! !! ",
|
||||
" ! ! !! ! ! !! ! ! ",
|
||||
" !! ! ! ! !! ! ! ",
|
||||
" !! !! !! ! !! ! ! ",
|
||||
" ! !! ! ! !! ! ! ! ",
|
||||
" ! ! ! ! ! ! ! !!! ",
|
||||
" ! ! ! !! ! !! !! ! ",
|
||||
" ! ! ! !! ! ! !! !! ! ",
|
||||
" !! !!!!! !!!! ! ",
|
||||
" !! !! ! ! !! !! ! !! ",
|
||||
" !! !! ! ! ! !! !! ",
|
||||
" !!!!! !! ! ! !! !! ",
|
||||
" ! ! !! ! ! !!!! ! ! ! ",
|
||||
" !! !! ! ! ! ! ! ",
|
||||
" ! ! ! !!! !! !! ! ! ! ",
|
||||
" !! ! ! ! !! ! !! ! ",
|
||||
" ! !!!! ! ! !! ! ! !! ",
|
||||
" !! !! ! ! !! !! ! !! ! ",
|
||||
" ! ! ! !! !! ! !!! ! ",
|
||||
" !! ! !! ! ! ! ! ",
|
||||
" ! !! !!!! ! ! ! ! ! ! ",
|
||||
" ! !! ! ! !! !! ! ",
|
||||
" ! !! ! !! !! !!!!! ! ",
|
||||
" ! ! !! !! !! ! ",
|
||||
" ! ! ! !! ! ! ! ",
|
||||
" ! ! ! !! !!! ! ",
|
||||
" ! ! ! !! ! !! ! ! ",
|
||||
" !! ! ! ! !! ! !!!! !! ",
|
||||
" !! ! !!! ! !! !! ! !! !!! ",
|
||||
" !! ! !! ! ! ! ! ! ",
|
||||
" ! !! ! !!! !! !! ! ! ! ",
|
||||
" ! ! ! ! ! ! ",
|
||||
" !!! ! ! !! !! ",
|
||||
" ! !!!! ! ! !! !! !! !! ",
|
||||
" !! !! ! !! ! !! !! ",
|
||||
" ! !! ! ! ! ! ! !! !!! ",
|
||||
" !!! ! ! ! ! !! !! !! ",
|
||||
" ! ! !!! ! !! !! ! ",
|
||||
" ! !! !! ! ! ! ! ! ",
|
||||
" ! !! !!! ! !! ! !!! ! ",
|
||||
" ! ! ! !!! !! ",
|
||||
" !! !! ! ! ! ",
|
||||
" !!! ! ! ! !! ! ! ",
|
||||
" !! !! ! ! ! !!! ! ",
|
||||
" ! !! ! ! ! ! !!! ! !! ! ",
|
||||
" !! !! ! ! !!! !! ! ",
|
||||
" ! ! ! ! !! ",
|
||||
" ! ! !! ",
|
||||
" ! ! ! ! ! !! ! !! ! ! ! ",
|
||||
" !!! !! ! !! ! ! ! ! ",
|
||||
" !! !!!! ! !! !! ! !! !! ! ",
|
||||
" ! ! !! !! ! !! ! ",
|
||||
" ! ! !! ! !!! ! ! ",
|
||||
" !! ! ! ! ! !! ",
|
||||
" !! ! !! ! ! ! ! ! ",
|
||||
" !! !! ! ! ! ! ! ! ! ",
|
||||
" ! !! !! ! !! !! !!! !! ! ",
|
||||
" !! !! !! !! !!!! ",
|
||||
" ! !! ! ! ! ",
|
||||
" ! ! !!!! !! ! ",
|
||||
" ! !! ! ! !! ! !!! ! ",
|
||||
" ! !! ! !! ! ! !!!! ",
|
||||
" ! !! !! ! ! !! !! !! !! !! ",
|
||||
" !!! ! !! !! ! ! !! !! ",
|
||||
" ! ",
|
||||
" ! ! ! ! ! ! !! ! ",
|
||||
" !! !! ! ! ! ! ! ! ",
|
||||
" !!!!! ! ! !! ! !! ! ",
|
||||
" ! ! ! !! !! ! ! !! ! ",
|
||||
" ! ! ! ! !! !! !! ",
|
||||
" ! ! ! !! ",
|
||||
" ! !! ! ! ! ! ! ",
|
||||
" ! !! ! ! !! !! ! ! ! ! ",
|
||||
" ! !! !!! !! ! !!! !! ! ",
|
||||
" ! ! ! !! ! ! !!!!! ! ",
|
||||
" !! ! ! ! ! ! ",
|
||||
" ! ! ! ",
|
||||
" ! ! !! !! ! !! ! ",
|
||||
" ! !! ! ! !! ! !! ! !! ! ",
|
||||
" !! !! !! ! ! !! !! ! ",
|
||||
" !! !! !!! ! ! !! !! ! !! ",
|
||||
" ! !! ! ! !! ! !! ! ",
|
||||
" ! ! !! ! ",
|
||||
" ! ! !! !! !! ! ! ! ",
|
||||
" !!!! ! !! !! ! !! ! ",
|
||||
" ! ! !!! ! ! ! ! !! ! ",
|
||||
" !! !! ! ! ! ! ! ! !! ",
|
||||
" !! !! ! ! !! !! ",
|
||||
" !!! ! !! !! ! ! !! ",
|
||||
" ! !! ! !! !! !! !! ! ",
|
||||
" !! ! ! !! ! ! !! ! ",
|
||||
" ! !! !! !! ! !!! ! ",
|
||||
" ! ! ! !!!!! ! !! ",
|
||||
" ! ! ! ! ! ! ! ! ",
|
||||
" ! ! ! ! ! ! !!! !! ! ",
|
||||
" !! ! ! !!!! ! !! ! ",
|
||||
" ! !! ! !! ! !! ! ",
|
||||
" !! !! !! ! ! !! !! ! !! !!! ",
|
||||
" !! ! ! ! ! ! ! ",
|
||||
" ! ! ! ! ! !! ! ! ! ",
|
||||
" ! !! ! !!! !! ! ",
|
||||
" !!! !! ! !! ! ! ! ",
|
||||
" !! !!!! ! ! ! ! !! ! ",
|
||||
" ! ! ! ! ! !! ! ",
|
||||
" ! ! ! !!! !! ",
|
||||
" !! ! ! !! ! ! ! !! ",
|
||||
" !! !! ! !! ! ! !! !! ! ! ",
|
||||
" !! !! !! ! ! ! ! ! !! ! ",
|
||||
" ! !! !!! !! ! !! !!! ",
|
||||
" ! ! ! ! ! ! !!! ",
|
||||
" ! ! ! ! ! !!! !! !! ! ! ",
|
||||
" ! !!!! !! ! ! ! ",
|
||||
" !! ! !! !! ! ",
|
||||
" !! ! !!! !! ! !! !! !! ",
|
||||
" ! !! ! ! ! ! !!! ",
|
||||
" ! !! !! ! !! ! ! ",
|
||||
" !! !! ! !! ! ! ! ! ",
|
||||
" !! !! ! ! !! ! ! ! ! ",
|
||||
" !! !! ! !! ! ! ! ! ",
|
||||
" !!!! ! !!!!! ",
|
||||
" ! ! ! ! !! ! ",
|
||||
" ! ! !! !! !!! !!! ",
|
||||
" ! ! !! !!! ! ! ",
|
||||
" ! !! !! ! !! !! ! !! !! ! ",
|
||||
" ! !! ! !! ! !! ! ! ! ",
|
||||
" ! !! !!! !!! ! ! !! ! ",
|
||||
" ! !! ! !! !! ! !! !!! ",
|
||||
" ! ! ! ! !! ",
|
||||
" ! !!! ! !! !! ! ",
|
||||
" !! ! !! !! !! !! ",
|
||||
" ! ! !! ! ! ! !! ",
|
||||
" !!!! !! ! !!! !! !! !!! ",
|
||||
" !! ! !!! ! !! !! ! ! ! ",
|
||||
" !! ! !! !!! !! ! ! ! ",
|
||||
" !! !! ! !! ! !! !! ! ",
|
||||
" ! !! ! ! ! ! !! ! ",
|
||||
" !!! ! !! ! ! ! ! ! ",
|
||||
" !!! ! !! ! ! ! ! ",
|
||||
" ! ! ! ! !! ! ! !! ",
|
||||
" ! ! !! ! ! !! !! ! ! ",
|
||||
" !! !! ! ! !! ! !!! ! !! ! ! ! ",
|
||||
" !! !! !! ! ! !! ! ! !! ! !! ",
|
||||
" !! !! !! ! !!! ! !!!!!! ! ! ! ",
|
||||
" ! !! ! ! ! !!!! ! ! ",
|
||||
" ! ! !!!!!! !! ! ! ",
|
||||
" ! ! !!!!!! !! ",
|
||||
" ! !! !! ",
|
||||
" !!!! ! ! ",
|
||||
" !!!! ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 65 KiB |
BIN
tests/visual_tests/images/lines-7-200-200-1.0-agg-reference.png
Normal file
After Width: | Height: | Size: 9.4 KiB |
After Width: | Height: | Size: 9.2 KiB |
BIN
tests/visual_tests/images/lines-7-200-200-2.0-agg-reference.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 9 KiB |
BIN
tests/visual_tests/images/lines-7-400-400-1.0-agg-reference.png
Normal file
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 19 KiB |
BIN
tests/visual_tests/images/lines-7-400-400-2.0-agg-reference.png
Normal file
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 22 KiB |
BIN
tests/visual_tests/images/lines-7-600-600-1.0-agg-reference.png
Normal file
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 30 KiB |
BIN
tests/visual_tests/images/lines-7-600-600-2.0-agg-reference.png
Normal file
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 34 KiB |
BIN
tests/visual_tests/images/lines-7-800-800-1.0-agg-reference.png
Normal file
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 40 KiB |
BIN
tests/visual_tests/images/lines-7-800-800-2.0-agg-reference.png
Normal file
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 46 KiB |
35
tests/visual_tests/styles/lines-7.xml
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE Map>
|
||||
<!-- dy and multi lines test -->
|
||||
<Map background-color="white" srs="+proj=latlong +datum=WGS84">
|
||||
|
||||
<Layer name="layer" srs="+proj=latlong +datum=WGS84">
|
||||
<StyleName>lines</StyleName>
|
||||
<StyleName>text</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="type">csv</Parameter>
|
||||
<Parameter name="inline">
|
||||
wkt,nr
|
||||
"LINESTRING(-1.000 -1.000, -0.958 -0.646, -0.917 -0.331, -0.875 -0.055, -0.833 0.185, -0.792 0.390, -0.750 0.562, -0.708 0.703, -0.667 0.815, -0.625 0.898, -0.583 0.956, -0.542 0.989, -0.500 1.000, -0.458 0.990, -0.417 0.961, -0.375 0.914, -0.333 0.852, -0.292 0.776, -0.250 0.688, -0.208 0.589, -0.167 0.481, -0.125 0.367, -0.083 0.248, -0.042 0.125, 0.000 0.000, 0.042 -0.125, 0.083 -0.248, 0.125 -0.367, 0.167 -0.481, 0.208 -0.589, 0.250 -0.688, 0.292 -0.776, 0.333 -0.852, 0.375 -0.914, 0.417 -0.961, 0.458 -0.990, 0.500 -1.000, 0.542 -0.989, 0.583 -0.956, 0.625 -0.898, 0.667 -0.815, 0.708 -0.703, 0.750 -0.562, 0.792 -0.390, 0.833 -0.185, 0.875 0.055, 0.917 0.331, 0.958 0.646, 1.000 1.000)",1
|
||||
</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
|
||||
<Style name="lines">
|
||||
<Rule>
|
||||
<LineSymbolizer stroke-width="1" stroke="green"/>
|
||||
<LineSymbolizer stroke-width="1" stroke="lightblue" offset="12"/>
|
||||
<LineSymbolizer stroke-width="1" stroke="lightblue" offset="-12"/>
|
||||
</Rule>
|
||||
</Style>
|
||||
|
||||
<Style name="text">
|
||||
<Rule>
|
||||
<!-- note: is an encoded \n -->
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="12" placement="line" spacing="10" max-char-angle-delta="180" dy="0" justify-alignment="center" allow-overlap="true">
|
||||
"u!__|__!u m!__|__!m b!__|__!b"
|
||||
</TextSymbolizer>
|
||||
</Rule>
|
||||
</Style>
|
||||
|
||||
</Map>
|
|
@ -96,6 +96,7 @@ files = {
|
|||
'lines-4': {'sizes': sizes_few_square,'bbox':default_text_box},
|
||||
'lines-5': {'sizes': sizes_few_square,'bbox':default_text_box},
|
||||
'lines-6': {'sizes': sizes_few_square,'bbox':default_text_box},
|
||||
'lines-7': {'sizes': sizes_few_square,'bbox':mapnik.Box2d(-1.2, -1.2, 1.2, 1.2)},
|
||||
'lines-multi-layout-1': {'sizes': sizes_few_square,'bbox':default_text_box},
|
||||
'lines-multi-layout-2': {'sizes': sizes_few_square,'bbox':default_text_box},
|
||||
'lines-multi-layout-3': {'sizes': sizes_few_square,'bbox':default_text_box},
|
||||
|
|
|
@ -42,7 +42,7 @@ struct quadtree_node
|
|||
quadtree_node(const box2d<double>& ext)
|
||||
: ext_(ext),data_()
|
||||
{
|
||||
memset(children_,0,sizeof(quadtree_node<T>*)*4);
|
||||
std::memset(children_,0,sizeof(quadtree_node<T>*)*4);
|
||||
}
|
||||
|
||||
~quadtree_node()
|
||||
|
@ -118,7 +118,7 @@ public:
|
|||
void write(std::ostream& out)
|
||||
{
|
||||
char header[16];
|
||||
memset(header,0,16);
|
||||
std::memset(header,0,16);
|
||||
header[0]='m';
|
||||
header[1]='a';
|
||||
header[2]='p';
|
||||
|
@ -205,10 +205,10 @@ private:
|
|||
int shape_count=node->data_.size();
|
||||
int recsize=sizeof(box2d<double>) + 3 * sizeof(int) + shape_count * sizeof(T);
|
||||
char* node_record=new char[recsize];
|
||||
memset(node_record,0,recsize);
|
||||
memcpy(node_record,&offset,4);
|
||||
memcpy(node_record+4,&node->ext_,sizeof(box2d<double>));
|
||||
memcpy(node_record+36,&shape_count,4);
|
||||
std::memset(node_record,0,recsize);
|
||||
std::memcpy(node_record,&offset,4);
|
||||
std::memcpy(node_record+4,&node->ext_,sizeof(box2d<double>));
|
||||
std::memcpy(node_record+36,&shape_count,4);
|
||||
for (int i=0;i<shape_count;++i)
|
||||
{
|
||||
memcpy(node_record + 40 + i * sizeof(T),&(node->data_[i]),sizeof(T));
|
||||
|
@ -221,7 +221,7 @@ private:
|
|||
++num_subnodes;
|
||||
}
|
||||
}
|
||||
memcpy(node_record + 40 + shape_count * sizeof(T),&num_subnodes,4);
|
||||
std::memcpy(node_record + 40 + shape_count * sizeof(T),&num_subnodes,4);
|
||||
out.write(node_record,recsize);
|
||||
delete [] node_record;
|
||||
|
||||
|
|