Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r61020 - in sandbox/geometry/libs/geometry/test: algorithms algorithms/buffer algorithms/overlay extensions/algorithms multi/algorithms/overlay
From: barend.gehrels_at_[hidden]
Date: 2010-04-03 09:39:22


Author: barendgehrels
Date: 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
New Revision: 61020
URL: http://svn.boost.org/trac/boost/changeset/61020

Log:
Added tests for buffer
Added test for remove_spikes
Small changes in tests for differences, sectionalize
Enhanced write_svg in the sense that .x()/.y() are removed, plus using max to avoid empty nonvisible boxes

Added:
   sandbox/geometry/libs/geometry/test/algorithms/buffer/
   sandbox/geometry/libs/geometry/test/algorithms/buffer/buffer.sln (contents, props changed)
   sandbox/geometry/libs/geometry/test/algorithms/buffer/linestring_buffer.cpp (contents, props changed)
   sandbox/geometry/libs/geometry/test/algorithms/buffer/linestring_buffer.vcproj (contents, props changed)
   sandbox/geometry/libs/geometry/test/algorithms/buffer/polygon_buffer.cpp (contents, props changed)
   sandbox/geometry/libs/geometry/test/algorithms/buffer/polygon_buffer.vcproj (contents, props changed)
   sandbox/geometry/libs/geometry/test/algorithms/buffer/test_buffer.hpp (contents, props changed)
   sandbox/geometry/libs/geometry/test/algorithms/overlay/dissolver.cpp (contents, props changed)
   sandbox/geometry/libs/geometry/test/algorithms/overlay/dissolver.vcproj (contents, props changed)
   sandbox/geometry/libs/geometry/test/algorithms/overlay/split_rings.cpp (contents, props changed)
   sandbox/geometry/libs/geometry/test/algorithms/overlay/split_rings.vcproj (contents, props changed)
   sandbox/geometry/libs/geometry/test/extensions/algorithms/remove_spikes.cpp (contents, props changed)
   sandbox/geometry/libs/geometry/test/extensions/algorithms/remove_spikes.vcproj (contents, props changed)
Text files modified:
   sandbox/geometry/libs/geometry/test/algorithms/difference.cpp | 51 +++++++++++++++++--------
   sandbox/geometry/libs/geometry/test/algorithms/overlay/overlay.sln | 12 ++++++
   sandbox/geometry/libs/geometry/test/algorithms/sectionalize.cpp | 78 +++++++++++++++++++++++++++++----------
   sandbox/geometry/libs/geometry/test/algorithms/test_difference.hpp | 45 ++++++++++++++++++++++-
   sandbox/geometry/libs/geometry/test/extensions/algorithms/extension_algorithms.sln | 6 +++
   sandbox/geometry/libs/geometry/test/multi/algorithms/overlay/multi_svg_mapper.hpp | 5 ++
   6 files changed, 158 insertions(+), 39 deletions(-)

Added: sandbox/geometry/libs/geometry/test/algorithms/buffer/buffer.sln
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/algorithms/buffer/buffer.sln 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polygon_buffer", "polygon_buffer.vcproj", "{42B6DE98-66F0-46CB-8A4C-54EB6030F07B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "linestring_buffer", "linestring_buffer.vcproj", "{02387445-E879-49F4-8264-C7CF9C6B8B9D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {42B6DE98-66F0-46CB-8A4C-54EB6030F07B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {42B6DE98-66F0-46CB-8A4C-54EB6030F07B}.Debug|Win32.Build.0 = Debug|Win32
+ {42B6DE98-66F0-46CB-8A4C-54EB6030F07B}.Release|Win32.ActiveCfg = Release|Win32
+ {42B6DE98-66F0-46CB-8A4C-54EB6030F07B}.Release|Win32.Build.0 = Release|Win32
+ {02387445-E879-49F4-8264-C7CF9C6B8B9D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {02387445-E879-49F4-8264-C7CF9C6B8B9D}.Debug|Win32.Build.0 = Debug|Win32
+ {02387445-E879-49F4-8264-C7CF9C6B8B9D}.Release|Win32.ActiveCfg = Release|Win32
+ {02387445-E879-49F4-8264-C7CF9C6B8B9D}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal

Added: sandbox/geometry/libs/geometry/test/algorithms/buffer/linestring_buffer.cpp
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/algorithms/buffer/linestring_buffer.cpp 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,60 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library) test file
+//
+// Copyright Barend Gehrels 2010, Geodan, Amsterdam, the Netherlands
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//#define BOOST_GEOMETRY_DEBUG_WITH_MAPPER
+//#define BOOST_GEOMETRY_DEBUG_ASSEMBLE
+//#define BOOST_GEOMETRY_DEBUG_IDENTIFIER
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/buffer.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <test_common/test_point.hpp>
+
+#include <test_buffer.hpp>
+
+static std::string const simplex = "LINESTRING(0 0,4 5)";
+static std::string const one_bend = "LINESTRING(0 0,4 5,7 4)";
+static std::string const two_bends = "LINESTRING(0 0,4 5,7 4,10 6)";
+static std::string const overlapping = "LINESTRING(0 0,4 5,7 4,10 6, 10 2,2 2)";
+
+template <typename P>
+void test_all()
+{
+ namespace bg = boost::geometry;
+ namespace buf = boost::geometry::strategy::buffer;
+ typedef bg::linestring<P> linestring;
+ typedef bg::polygon<P> polygon;
+
+ double right = 1.5;
+
+ test_one<linestring, buf::join_round, polygon>("simplex", simplex, 'r', 19.2093727122985, 1.5, right);
+ test_one<linestring, buf::join_miter, polygon>("simplex", simplex, 'm', 19.2093727122985, 1.5, right);
+
+ test_one<linestring, buf::join_round, polygon>("one_bend", one_bend, 'r', 28.4879539312069, 1.5, right);
+ test_one<linestring, buf::join_miter, polygon>("one_bend", one_bend, 'm', 28.6962056928037, 1.5, right);
+
+ test_one<linestring, buf::join_round, polygon>("two_bends", two_bends, 'r', 39.2220036534424, 1.5, right);
+ test_one<linestring, buf::join_miter, polygon>("two_bends", two_bends, 'm', 39.5128595191957, 1.5, right);
+
+ test_one<linestring, buf::join_round, polygon>("overlapping", overlapping, 'r', 65.646005724872, 1.5, right);
+ test_one<linestring, buf::join_miter, polygon>("overlapping", overlapping, 'm', 68.1395194809293, 1.5, right);
+}
+
+int test_main(int, char* [])
+{
+ namespace bg = boost::geometry;
+ test_all<bg::point<double, 2, bg::cs::cartesian> >();
+
+
+ return 0;
+}

Added: sandbox/geometry/libs/geometry/test/algorithms/buffer/linestring_buffer.vcproj
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/algorithms/buffer/linestring_buffer.vcproj 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="linestring_buffer"
+ ProjectGUID="{02387445-E879-49F4-8264-C7CF9C6B8B9D}"
+ RootNamespace="linestring_buffer"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\linestring_buffer"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TEST_WITH_SVG"
+ MinimalRebuild="true"
+ ExceptionHandling="2"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\linestring_buffer"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;TEST_WITH_SVG"
+ ExceptionHandling="2"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\linestring_buffer.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Added: sandbox/geometry/libs/geometry/test/algorithms/buffer/polygon_buffer.cpp
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/algorithms/buffer/polygon_buffer.cpp 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,178 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library) test file
+//
+// Copyright Barend Gehrels 2010, Geodan, Amsterdam, the Netherlands
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <geometry_test_common.hpp>
+
+#define BOOST_GEOMETRY_TEST_BUFFER_POLYGON
+#include <test_buffer.hpp>
+
+
+
+static std::string const simplex
+ = "POLYGON ((0 0,1 5,6 1,0 0))";
+static std::string const concave_simplex
+ = "POLYGON ((0 0,3 5,3 3,5 3,0 0))";
+static std::string const donut_simplex
+ = "POLYGON ((0 0,1 9,8 1,0 0),(1 1,4 1,1 4,1 1))";
+static std::string const letter_L
+ = "POLYGON ((0 0,0 4,1 4,1 1,3 1,3 0,0 0))";
+static std::string const indentation
+ = "POLYGON ((0 0,0 5,4 5,4 4,3 3,2 4,2 1,3 2,4 1,4 0,0 0))";
+static std::string const arrow
+ = "POLYGON ((1 0,1 5,0.5 4.5,2 10,3.5 4.5,3 5,3 0,1 0))";
+static std::string const tipped_aitch
+ = "POLYGON ((0 0,0 3,3 3,3 4,0 4,0 7,7 7,7 4,4 4,4 3,7 3,7 0,0 0))";
+static std::string const snake
+ = "POLYGON ((0 0,0 3,3 3,3 4,0 4,0 7,8 7,8 4,6 4,6 3,8 3,8 0,7 0,7 2,5 2"
+ ",5 5,7 5,7 6,1 6,1 5,4 5,4 2,1 2,1 1,6 1,6 0,0 0))";
+static std::string const church
+ = "POLYGON ((0 0,0 3,2.999 3,3 8,3 0,0 0))";
+static std::string const flower
+ = "POLYGON ((1 0,1 10,9 10,9 0,4.99 0,4.99 5.5,4.5 6,5 6.5,5.5 6,5.01 5.5,5.01 0.01,5.25 0.01,5.25 5,6 3,8 5,6 6,8 7,6 9,5 7,4 9,2 7,4 6,2 5,4 3,4.75 5,4.75 0,1 0))";
+
+template <typename P>
+void test_all()
+{
+ namespace bg = boost::geometry;
+ namespace buf = boost::geometry::strategy::buffer;
+
+ typedef bg::polygon<P> polygon_type;
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("L", letter_L, 'm', 14, 0.5);
+ test_one<polygon_type, buf::join_round, polygon_type>("L", letter_L, 'r', 13.7254516100806, 0.5);
+ test_one<polygon_type, buf::join_miter, polygon_type>("simplex", simplex, 'm', 52.8733092508931, 1.5);
+ test_one<polygon_type, buf::join_round, polygon_type>("simplex", simplex, 'r', 47.9004943967109, 1.5);
+ test_one<polygon_type, buf::join_miter, polygon_type>("concave_simplex", concave_simplex, 'm', 16.3861105439862, 0.5);
+ test_one<polygon_type, buf::join_round, polygon_type>("concave_simplex", concave_simplex, 'r', 14.5563908986706, 0.5);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation4", indentation, 'm', 25.7741125496954, 0.4);
+ test_one<polygon_type, buf::join_round, polygon_type>("indentation4", indentation, 'r', 25.5641980024698, 0.4);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation8", indentation, 'm', 35.594305909533, 0.8);
+ test_one<polygon_type, buf::join_round, polygon_type>("indentation8", indentation, 'r', 35.0012686715019, 0.8);
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation12", indentation, 'm', 46.3541038841777, 1.2);
+ test_one<polygon_type, buf::join_round, polygon_type>("indentation12", indentation, 'r', 45.0197700986076, 1.2);
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation4_neg", indentation, 'm', 6.99098413022335, -0.4);
+ //test_one<polygon_type, buf::join_round, polygon_type>("indentation4_neg", indentation, 'r', 7.25523322189147, -0.4);
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation8_neg", indentation, 'm', 1.36941992048731, -0.8);
+ //test_one<polygon_type, buf::join_round, polygon_type>("indentation8_neg", indentation, 'r', 1.37375487490664, -0.8);
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation12_neg", indentation, 'm', 0, -1.2);
+ //test_one<polygon_type, buf::join_round, polygon_type>("indentation12_neg", indentation, 'r', 0, -1.2);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex6", donut_simplex, 'm', 53.6479838666524, 0.6);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex6", donut_simplex, 'r', 52.8197383107592, 0.6);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex8", donut_simplex, 'm', 61.1323012599270, 0.8);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex8", donut_simplex, 'r', 59.6598647161168, 0.8);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex10", donut_simplex, 'm', 68.6698998096905, 1.0);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex10", donut_simplex, 'r', 66.3692177099870, 1.0);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex12", donut_simplex, 'm', 76.6051864381534, 1.2);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex12", donut_simplex, 'r', 73.2922042145803, 1.2);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex14", donut_simplex, 'm', 84.9742419554578, 1.4);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex14", donut_simplex, 'r', 80.4649050400389, 1.4);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex16", donut_simplex, 'm', 93.7770663616038, 1.6);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex16", donut_simplex, 'r', 87.8873201863629, 1.6);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("arrow4", arrow, 'm', 28.2654860719170, 0.4);
+ test_one<polygon_type, buf::join_round, polygon_type>("arrow4", arrow, 'r', 27.0385824776218, 0.4);
+ test_one<polygon_type, buf::join_miter, polygon_type>("arrow5", arrow, 'm', 31.5003260106997, 0.5);
+ test_one<polygon_type, buf::join_round, polygon_type>("arrow5", arrow, 'r', 29.6211879021183, 0.5);
+ test_one<polygon_type, buf::join_miter, polygon_type>("arrow6", arrow, 'm', 34.9025533178038, 0.6);
+ test_one<polygon_type, buf::join_round, polygon_type>("arrow6", arrow, 'r', 32.2572740033805, 0.6);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("tipped_aitch3", tipped_aitch, 'm', 55.36, 0.3);
+ test_one<polygon_type, buf::join_miter, polygon_type>("tipped_aitch9", tipped_aitch, 'm', 77.44, 0.9);
+ test_one<polygon_type, buf::join_miter, polygon_type>("tipped_aitch13", tipped_aitch, 'm', 92.16, 1.3);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("snake4", snake, 'm', 64.44, 0.4);
+ test_one<polygon_type, buf::join_miter, polygon_type>("snake5", snake, 'm', 72, 0.5);
+ test_one<polygon_type, buf::join_miter, polygon_type>("snake6", snake, 'm', 75.44, 0.6);
+ test_one<polygon_type, buf::join_miter, polygon_type>("snake16", snake, 'm', 114.24, 1.6);
+
+ test_one<polygon_type, buf::join_round, polygon_type>("flower1", flower, 'r', 67.48584413272776, 0.1);
+ test_one<polygon_type, buf::join_miter, polygon_type>("flower1", flower, 'm', 67.613949189084963, 0.1);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower4", flower, 'r', 87.665381352300471, 0.4);
+ test_one<polygon_type, buf::join_miter, polygon_type>("flower4", flower, 'm', 87.8306529577, 0.4);
+
+ return;
+
+ /*
+ for (int i = 4; i < 30; i++)
+ {
+ {
+ std::ostringstream out;
+ out << "snake_" << i;
+ test_one<polygon_type, buf::join_miter, polygon_type>(out.str(), snake, double(i) / 10.0);
+ }
+ {
+ std::ostringstream out;
+ out << "snake_" << i << "_neg";
+ test_one<polygon_type, buf::join_miter, polygon_type>(out.str(), snake, double(-i) / 10.0);
+ }
+ }
+ */
+
+ /*
+ for (int i = 4; i < 30; i++)
+ {
+ std::ostringstream out;
+ out << "church_" << i;
+ test_one<polygon_type, buf::join_miter, polygon_type>(out.str(), church, 'm', double(i) / 10.0);
+ }
+ for (int i = 4; i < 30; i++)
+ {
+ std::ostringstream out;
+ out << "flower_" << i;
+ test_one<polygon_type, buf::join_miter, polygon_type>(out.str(), flower, 'm', double(i) / 10.0);
+ }
+ static std::string const snl_8961 =
+ "POLYGON((161081 472784,161061 472769,161007 472740,160996 472746,160998 472777,160999 472782,161005 472888,161012 472889,161019 472891,161032 472895,161038 472883,161081 472784),(161026 472811,161022 472814,161019 472810,161023 472807,161026 472811))";
+ test_one<polygon_type, buf::join_miter, polygon_type>("snl_8961_10", snl_8961, 'm', 10.0);
+ test_one<polygon_type, buf::join_miter, polygon_type>("snl_8961_100", snl_8961, 'm', 100.0);
+ test_one<polygon_type, buf::join_miter, polygon_type>("snl_8961_500", snl_8961, 'm', 500.0);
+
+ static std::string const snl_25120 =
+ "POLYGON((225343.489 585110.376,225319.123 585165.731,225323.497 585167.287,225323.134 585167.157,225313.975 585169.208,225321.828 585172,225332.677 585175.83,225367.032 585186.977,225401.64 585196.671,225422.799 585201.029,225429.784 585202.454,225418.859 585195.112,225423.803 585196.13,225425.389 585196.454,225397.027 585165.48,225363.802 585130.372,225354.086 585120.261,225343.489 585110.376))";
+ test_one<polygon_type, buf::join_miter, polygon_type>("snl_25120", snl_25120, 'm', 1.25);
+ return;
+
+
+ for (int i = 1; i < 10; i++)
+ {
+ std::ostringstream out;
+ out << "snl_7309_" << i;
+ static std::string const snl_7309 =
+ "POLYGON((116042.2 464335.07,116045.9 464325.15,116051.33 464311.53,116056.35 464294.59,116066.41 464264.16,116066.44 464264.09,116060.35 464280.93,116028.89 464268.43,116028.89 464268.44,116024.74 464280.7,116018.91 464296.71,116012.3 464319.59,116004.76 464345.13,115988.36 464389.71,115975.39 464426.35,115965.07 464455.99,115964.81 464458.9,115966.39 464461.02,115976.45 464466.84,115984.12 464470.41,115988.22 464471.33,115991.8 464470.8,115995.9 464467.76,115997.48 464462.73,115999.73 464455.72,116002.11 464448.98,116006.08 464438.53,116010.18 464429.79,116021.96 464392.75,116034 464357.7,116042.2 464335.07))";
+ test_one<polygon_type, buf::join_miter, polygon_type>(out.str(), snl_7309, 'm', i * 10.0);
+ }
+
+ //return;
+ test_one<polygon_type, buf::join_miter, polygon_type>("toolkit1", "POLYGON((173356.986490154 605912.122380707,173358.457939143 605902.891897507,173358.458257372 605902.889901239,173214.162964795 605901.13020255,173214.162746654 605901.132200038,173213.665 605905.69,173212.712441616 605913.799985923,173356.986490154 605912.122380707))",
+ 'm', 10.0);
+ for (int i = 1; i < 20; i++)
+ {
+ std::ostringstream out;
+ out << "toolkit2_" << i;
+ test_one<polygon_type, buf::join_miter, polygon_type>(out.str(),
+ "POLYGON((120528.56 462115.62,120533.4 462072.1,120533.4 462072.01,120533.39 462071.93,120533.36 462071.86,120533.33 462071.78,120533.28 462071.72,120533.22 462071.66,120533.15 462071.61,120533.08 462071.58,120533 462071.55,120532.92 462071.54,120467.68 462068.66,120468.55 462059.04,120517.39 462062.87,120517.47 462062.87,120517.55 462062.86,120517.62 462062.83,120517.69 462062.79,120517.76 462062.74,120517.81 462062.68,120517.86 462062.62,120517.89 462062.55,120517.92 462062.47,120530.49 461998.63,120530.5 461998.55,120530.49 461998.47,120530.47 461998.39,120530.44 461998.31,120530.4 461998.24,120530.35 461998.18,120530.28 461998.13,120530.21 461998.09,120530.13 461998.06,120482.19 461984.63,120485 461963.14,120528.2 461950.66,120528.28 461950.63,120528.35 461950.59,120528.42 461950.53,120528.47 461950.47,120528.51 461950.4,120528.54 461950.32,120528.56 461950.24,120528.56 461950.15,120528.55 461950.07,120528.53 461949.99,120528.49 461949.92,120528.44 461949.85,120497.49 461915.03,120497.43 461
914.98,120497.37 461914.93,120497.3 461914.9,120497.23 461914.88,120497.15 461914.86,120424.61 461910.03,120424.53 461910.03,120424.45 461910.05,120424.37 461910.07,120424.3 461910.11,120424.24 461910.16,120424.18 461910.22,120424.14 461910.29,120424.11 461910.37,120424.09 461910.45,120424.08 461910.53,120424.08 461967.59,120424.08 461967.67,120424.1 461967.75,120424.14 461967.82,120424.18 461967.89,120424.23 461967.95,120424.3 461968,120424.37 461968.04,120424.44 461968.07,120424.52 461968.09,120473.31 461973.83,120469.63 461993.16,120399.48 461986.43,120399.4 461986.43,120399.32 461986.44,120399.25 461986.47,120399.17 461986.5,120399.11 461986.55,120399.05 461986.61,120399.01 461986.67,120398.97 461986.74,120398.95 461986.82,120398.93 461986.9,120394.1 462057.5,120394.1 462057.58,120394.11 462057.66,120394.14 462057.74,120394.18 462057.81,120394.23 462057.87,120394.29 462057.93,120394.35 462057.97,120394.43 462058,120394.5 462058.03,120394.58 462058.03,120458.74 462059.95,120455.16 462072.48,120396.57 4620
67.68,120396.49 462067.68,120396.4 462067.69,120396.32 462067.72,120396.25 462067.76,120396.18 462067.82,120396.13 462067.88,120396.08 462067.96,120396.05 462068.04,120396.03 462068.12,120392.17 462103.9,120392.16 462103.99,120392.18 462104.07,120392.2 462104.15,120392.24 462104.22,120392.29 462104.29,120392.35 462104.35,120392.42 462104.4,120392.5 462104.43,120392.58 462104.45,120392.66 462104.46,120393.63 462104.46,120393.63 462103.46,120393.22 462103.46,120396.98 462068.71,120455.49 462073.51,120455.57 462073.51,120455.66 462073.49,120455.74 462073.46,120455.81 462073.42,120455.88 462073.37,120455.93 462073.3,120455.98 462073.23,120456.01 462073.15,120459.88 462059.61,120459.89 462059.52,120459.9 462059.44,120459.88 462059.36,120459.86 462059.28,120459.82 462059.21,120459.77 462059.14,120459.72 462059.08,120459.65 462059.04,120459.57 462059,120459.49 462058.98,120459.41 462058.97,120395.13 462057.05,120399.9 461987.48,120469.99 461994.2,120470.07 461994.2,120470.15 461994.19,120470.23 461994.16,120470.3 4
61994.13,120470.37 461994.08,120470.42 461994.02,120470.47 461993.95,120470.5 461993.88,120470.53 461993.8,120474.4 461973.48,120474.4 461973.4,120474.4 461973.32,120474.38 461973.24,120474.35 461973.16,120474.31 461973.09,120474.25 461973.03,120474.19 461972.98,120474.12 461972.94,120474.04 461972.91,120473.96 461972.9,120425.08 461967.14,120425.08 461911.06,120496.88 461915.85,120527.16 461949.92,120484.4 461962.27,120484.33 461962.3,120484.25 461962.35,120484.19 461962.4,120484.14 461962.46,120484.09 461962.53,120484.06 461962.61,120484.05 461962.69,120481.14 461984.93,120481.14 461985.01,120481.15 461985.09,120481.17 461985.17,120481.2 461985.24,120481.25 461985.31,120481.3 461985.36,120481.36 461985.41,120481.43 461985.45,120481.51 461985.48,120529.42 461998.9,120517.02 462061.84,120468.14 462058,120468.05 462058,120467.97 462058.02,120467.89 462058.05,120467.81 462058.09,120467.75 462058.15,120467.69 462058.22,120467.65 462058.29,120467.62 462058.37,120467.6 462058.46,120466.64 462069.1,120466.63 46206
9.18,120466.65 462069.26,120466.67 462069.33,120466.71 462069.4,120466.76 462069.47,120466.81 462069.53,120466.88 462069.57,120466.95 462069.61,120467.03 462069.63,120467.11 462069.64,120532.34 462072.52,120527.62 462115.03,120391.73 462106.36,120391.66 462107.36,120528.03 462116.06,120528.12 462116.06,120528.2 462116.04,120528.28 462116.02,120528.35 462115.97,120528.42 462115.92,120528.47 462115.85,120528.51 462115.78,120528.54 462115.7,120528.56 462115.62))",
+ 'm', double(i)
+ );
+ }
+ */
+
+
+
+
+}
+
+int test_main(int, char* [])
+{
+ namespace bg = boost::geometry;
+ test_all<bg::point<double, 2, bg::cs::cartesian> >();
+
+ return 0;
+}

Added: sandbox/geometry/libs/geometry/test/algorithms/buffer/polygon_buffer.vcproj
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/algorithms/buffer/polygon_buffer.vcproj 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="polygon_buffer"
+ ProjectGUID="{42B6DE98-66F0-46CB-8A4C-54EB6030F07B}"
+ RootNamespace="polygon_buffer"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\polygon_buffer"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TEST_WITH_SVG"
+ MinimalRebuild="true"
+ ExceptionHandling="2"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\polygon_buffer"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;TEST_WITH_SVG"
+ ExceptionHandling="2"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\polygon_buffer.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Added: sandbox/geometry/libs/geometry/test/algorithms/buffer/test_buffer.hpp
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/algorithms/buffer/test_buffer.hpp 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,284 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library) test file
+//
+// Copyright Barend Gehrels 2010, Geodan, Amsterdam, the Netherlands
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_TEST_BUFFER_HPP
+#define BOOST_GEOMETRY_TEST_BUFFER_HPP
+
+
+#define BOOST_GEOMETRY_DEBUG_WITH_MAPPER
+//#define BOOST_GEOMETRY_DEBUG_SPLIT_RINGS
+
+//#define BOOST_GEOMETRY_CHECK_WITH_POSTGIS
+//#define BOOST_GEOMETRY_DEBUG_ASSEMBLE
+//#define BOOST_GEOMETRY_DEBUG_IDENTIFIER
+
+#undef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
+//#undef TEST_WITH_SVG
+
+
+#if defined(BOOST_GEOMETRY_DEBUG_WITH_MAPPER)
+#define TEST_WITH_SVG
+#endif
+
+#include <fstream>
+#include <iomanip>
+
+#include <boost/foreach.hpp>
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/algorithms/envelope.hpp>
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/centroid.hpp>
+#include <boost/geometry/algorithms/union.hpp>
+
+
+#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/dissolver.hpp>
+#include <boost/geometry/algorithms/detail/buffer/remove_within_distance.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/algorithms/disjoint.hpp>
+#include <boost/geometry/algorithms/dissolve.hpp>
+#include <boost/geometry/algorithms/buffer.hpp>
+#include <boost/geometry/algorithms/detail/buffer/linestring_buffer.hpp>
+#include <boost/geometry/algorithms/detail/buffer/polygon_buffer.hpp>
+#include <boost/geometry/algorithms/detail/overlay/split_rings.hpp>
+
+#include <boost/geometry/strategies/buffer.hpp>
+
+#include <boost/geometry/extensions/gis/io/wkt/wkt.hpp>
+
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+#endif
+
+
+
+template
+<
+ typename GeometryOut,
+ template
+ <
+ typename
+ , typename
+#if defined(BOOST_GEOMETRY_DEBUG_WITH_MAPPER)
+ , typename
+#endif
+ > class JoinStrategy,
+ typename Geometry
+>
+void test_buffer(std::string const& caseid, Geometry const& g1,
+ char join,
+ double expected_area,
+ double distance_left, double distance_right)
+{
+ namespace bg = boost::geometry;
+
+ typedef typename bg::coordinate_type<Geometry>::type coordinate_type;
+ typedef typename bg::point_type<Geometry>::type point_type;
+ typedef bg::strategy::buffer::distance_assymetric<coordinate_type> distance;
+
+ typedef typename bg::ring_type<GeometryOut>::type ring_type;
+
+ typedef JoinStrategy
+ <
+ point_type,
+ typename bg::point_type<GeometryOut>::type
+#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
+ , bg::svg_mapper<point_type>
+#endif
+ > join_strategy;
+
+ std::vector<GeometryOut> buffered;
+
+ typedef bg::detail::buffer::intersecting_inserter
+ <
+ std::vector<GeometryOut>
+ > inserter_type;
+
+
+#if ! defined(TEST_WITH_SVG)
+ inserter_type inserter(buffered);
+
+ #if defined(BOOST_GEOMETRY_TEST_BUFFER_POLYGON)
+ GeometryOut buffered_step1;
+ bg::detail::buffer::polygon_buffer
+ <
+ Geometry, Geometry, join_strategy
+ >::apply(g1, buffered_step1, distance_left, join_strategy());
+
+ //bg::dissolve_inserter<GeometryOut>(buffered_step1, std::back_inserter(buffered));
+ buffered.push_back(buffered_step1);
+ #else
+ bg::detail::buffer::linestring_buffer
+ <
+ Geometry, GeometryOut, distance, join_strategy
+ >::apply(g1, inserter,
+ distance(distance_left, distance_right),
+ join_strategy());
+ #endif
+
+#else
+
+ {
+ std::ostringstream filename;
+ filename << "buffer_"
+ << (bg::geometry_id<Geometry>::value == 2 ? "line" : "poly") << "_"
+ << caseid << "_"
+ << string_from_type<coordinate_type>::name()
+ << "_" << join
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<point_type> mapper(svg, 500, 500);
+
+ inserter_type inserter(buffered);
+
+ // Display including a margin
+ bg::box<point_type> extent;
+ bg::envelope(g1, extent);
+ bg::buffer(extent, extent, 2);
+ mapper.add(extent);
+
+ #if defined(BOOST_GEOMETRY_TEST_BUFFER_POLYGON)
+ Geometry buffered_step1;
+ bg::detail::buffer::polygon_buffer
+ <
+ Geometry, Geometry, join_strategy
+ >::apply(g1, buffered_step1, distance_left
+#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
+ , join_strategy(mapper), mapper
+#else
+ , join_strategy()
+#endif
+ );
+
+ //bg::dissolve_inserter<GeometryOut>(buffered_step1, std::back_inserter(buffered));
+ buffered.push_back(buffered_step1);
+
+ #else
+ bg::detail::buffer::linestring_buffer
+ <
+ Geometry, GeometryOut, distance, join_strategy
+ >::apply(g1, inserter,
+ distance(distance_left, distance_right)
+#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
+ , join_strategy(mapper), mapper
+#else
+ , join_strategy()
+#endif
+ );
+ #endif
+
+ // Map input geometry in green
+ mapper.map(g1, "opacity:0.5;fill:rgb(0,255,0);stroke:rgb(0,255,0);stroke-width:1");
+
+ std::vector<ring_type> rings;
+ BOOST_FOREACH(GeometryOut const& polygon, buffered)
+ {
+//std::cout << bg::wkt(polygon) << " ; POLYGON" << std::endl;
+ bg::split_rings(polygon, rings);
+ }
+
+/*
+ BOOST_FOREACH(ring_type const& ring, rings)
+ {
+ mapper.map(ring,
+ bg::area(ring) > 0
+ ? "opacity:0.5;fill:none;stroke:rgb(255,0,0);stroke-width:8"
+ : "opacity:0.5;fill:none;stroke:rgb(0,0,255);stroke-width:8"
+ );
+std::cout << bg::wkt(ring)
+ << " ; " << bg::area(ring)
+ << " " << ring.size()
+ << std::endl;
+ }
+*/
+
+ std::vector<GeometryOut> buffered_and_unioned;
+ bg::dissolver(rings, buffered_and_unioned);
+
+ std::vector<GeometryOut> buffered_and_assembled;
+ bg::detail::overlay::assemble<GeometryOut>(buffered_and_unioned,
+ std::map<bg::ring_identifier, int>(),
+ buffered_and_unioned[0], buffered_and_unioned[0], 1, true, true,
+ std::back_inserter(buffered_and_assembled));
+
+
+
+ // Map buffer in green
+ BOOST_FOREACH(GeometryOut const& p, buffered_and_assembled)
+ {
+ mapper.map(p, "opacity:0.8;fill:none;stroke:rgb(0,64,0);stroke-width:2");
+ }
+ buffered.swap(buffered_and_assembled);
+}
+#endif
+
+ double a = 0.0;
+ BOOST_FOREACH(GeometryOut const& polygon, buffered)
+ {
+ a += bg::area(polygon);
+ }
+ BOOST_CHECK_CLOSE(a, expected_area, join == 'r' ? 0.1 : 0.001);
+}
+
+#ifdef BOOST_GEOMETRY_CHECK_WITH_POSTGIS
+static int counter = 0;
+#endif
+
+template
+<
+ typename Geometry,
+ template
+ <
+ typename
+ , typename
+#if defined(BOOST_GEOMETRY_DEBUG_WITH_MAPPER)
+ , typename
+#endif
+ > class JoinStrategy,
+ typename GeometryOut
+>
+void test_one(std::string const& caseid, std::string const& wkt,
+ char join, double expected_area,
+ double distance_left, double distance_right = -999)
+{
+ namespace bg = boost::geometry;
+ Geometry g;
+ bg::read_wkt(wkt, g);
+
+ typedef typename bg::point_type<Geometry>::type point_type;
+
+ //std::cout << caseid << std::endl;
+
+
+#ifdef BOOST_GEOMETRY_CHECK_WITH_POSTGIS
+ std::cout
+ << (counter > 0 ? "union " : "")
+ << "select " << counter++
+ << ", '" << caseid << "' as caseid"
+ << ", ST_Area(ST_Buffer(ST_GeomFromText('" << wkt << "'), "
+ << distance_left
+ << ", 'endcap=flat join=" << (join == 'm' ? "miter" : "round") << "'))"
+ << ", " << expected_area
+ << std::endl;
+#endif
+
+ test_buffer<GeometryOut, JoinStrategy>
+ (caseid, g, join, expected_area, distance_left, distance_right);
+}
+
+
+#endif

Modified: sandbox/geometry/libs/geometry/test/algorithms/difference.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/algorithms/difference.cpp (original)
+++ sandbox/geometry/libs/geometry/test/algorithms/difference.cpp 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -5,6 +5,9 @@
 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
+#define BOOST_GEOMETRY_CHECK_WITH_POSTGIS
+
+
 #include <iostream>
 #include <string>
 
@@ -25,47 +28,61 @@
 
     test_one<polygon, polygon, polygon>("two_bends",
         two_bends[0], two_bends[1],
- 1, 7, 24.0,
- 1, 7, 24.0);
+ 1, 7, 8.0,
+ 1, 7, 8.0);
 
     test_one<polygon, polygon, polygon>("star_comb_15",
         star_15, comb_15,
- 28, 150, 189.952883,
- 28, 150, 189.952883);
+ 30, 150, 227.658275102812,
+ 30, 150, 480.485775259312);
 
     test_one<polygon, polygon, polygon>("simplex_normal",
         simplex_normal[0], simplex_normal[1],
- 1, 7, 5.47363293,
- 1, 7, 5.47363293);
+ 3, 3, 2.52636706856656,
+ 3, 3, 3.52636706856656);
 
+ /* TODO: erroneous in assemble
     test_one<polygon, polygon, polygon>("fitting",
         fitting[0], fitting[1],
- 0, 0, 0, 0, 0, 0);
+ 1, 0, 21.0,
+ 1, 0, 4.0);
+ */
 
     test_one<polygon, polygon, polygon>("new_hole",
         new_hole[0], new_hole[1],
- 2, 10, 2.0,
- 2, 10, 2.0);
+ 1, 10, 7.0,
+ 1, 10, 14.0);
 
+ /* TODO: erroneous in assemble
     test_one<polygon, polygon, polygon>("intersect_holes_disjoint",
         intersect_holes_disjoint[0], intersect_holes_disjoint[1],
- 1, 15, 18.0,
- 1, 15, 18.0);
+ 2, 15, 16.0,
+ 2, 15, 6.0);
+ */
 
     test_one<polygon, polygon, polygon>("intersect_holes_intersect",
         intersect_holes_intersect[0], intersect_holes_intersect[1],
- 1, 14, 18.25,
- 1, 14, 18.25);
+ 2, 14, 15.75,
+ 2, 14, 5.75);
 
     test_one<polygon, polygon, polygon>(
             "case4", case_4[0], case_4[1],
- 4, 22, 1.1901714,
- 4, 27, 1.6701714);
+ 6, 22, 2.77878787878788,
+ 4, 27, 4.77878787878788);
 
     test_one<polygon, polygon, polygon>(
             "case5", case_5[0], case_5[1],
- 4, 22, 1.1901714,
- 4, 27, 1.6701714);
+ 8, 22, 2.43452380952381,
+ 7, 27, 3.18452380952381);
+
+ test_one<polygon, polygon, polygon>(
+ "positive_negative",
+ "POLYGON((0 0,0 4,4 4,4 0,0 0))",
+ //"POLYGON((2 2,6 2,6 3,2 3,2 2))",
+ "POLYGON((2 2,2 3,6 3,6 2,2 2))",
+ 5, 22, 1.1901714,
+ 5, 27, 1.6701714);
+
 }
 
 

Added: sandbox/geometry/libs/geometry/test/algorithms/overlay/dissolver.cpp
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/algorithms/overlay/dissolver.cpp 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,219 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library) test file
+//
+// Copyright Barend Gehrels 2010, Geodan, Amsterdam, the Netherlands
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <string>
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/dissolver.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/multi/multi.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/extensions/gis/io/wkt/read_wkt_multi.hpp>
+#include <boost/geometry/extensions/io/svg/write_svg_multi.hpp>
+
+
+#include <test_common/test_point.hpp>
+
+
+//#define TEST_WITH_SVG
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+#endif
+
+// Collection might be a multi-geometry, or std::vector<ring>
+template <typename GeometryOut, typename Collection, typename T>
+void test_dissolve_plusmin(std::string const& caseid, Collection const& input,
+ T const& expected_positive_area,
+ T const& expected_negative_area)
+{
+ namespace bg = boost::geometry;
+ typedef typename boost::range_value<GeometryOut>::type geometry_type;
+ typedef typename bg::point_type<geometry_type>::type point_type;
+
+
+ GeometryOut output;
+ bg::dissolver(input, output);
+
+ T zero = T();
+ T positive_area = T();
+ T negative_area = T();
+
+ BOOST_FOREACH(geometry_type const& geometry, output)
+ {
+ T a = bg::area(geometry);
+ if (a > zero)
+ {
+ positive_area += a;
+ }
+ else
+ {
+ negative_area += a;
+ }
+ }
+
+ BOOST_CHECK_CLOSE(positive_area, expected_positive_area, 0.001);
+ BOOST_CHECK_CLOSE(negative_area, expected_negative_area, 0.001);
+
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "dissolve_plusmin_"
+ << caseid << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<point_type> mapper(svg, 500, 500);
+
+ typedef typename boost::range_value<Collection>::type value_type;
+ BOOST_FOREACH(value_type const& geometry, input)
+ {
+ mapper.add(geometry);
+ }
+
+ BOOST_FOREACH(value_type const& geometry, input)
+ {
+ mapper.map(geometry,
+ "opacity:0.6;fill:rgb(0,255,0);stroke:rgb(0,0,0);stroke-width:0.5");
+ }
+ BOOST_FOREACH(geometry_type const& geometry, output)
+ {
+ mapper.map(geometry,
+ bg::area(geometry) > 0
+ ? "opacity:0.5;fill:none;stroke:rgb(255,0,0);stroke-width:5"
+ : "opacity:0.5;fill:none;stroke:rgb(0,0,255);stroke-width:5"
+ );
+ }
+ }
+#endif
+
+}
+
+template <typename MultiPolygon, typename T>
+void test_geometry(std::string const& caseid, std::string const& wkt,
+ T const& expected_positive_area,
+ T const& expected_negative_area = T())
+{
+ namespace bg = boost::geometry;
+
+ MultiPolygon multi_polygon;
+ bg::read_wkt(wkt, multi_polygon);
+
+ // Test std::vector<Polygon> (= multi_polygon)
+ test_dissolve_plusmin<MultiPolygon>(caseid, multi_polygon,
+ expected_positive_area,
+ expected_negative_area);
+
+ // Test std::vector<ring>
+ {
+ typedef typename boost::range_value<MultiPolygon>::type polygon_type;
+ typedef typename bg::ring_type<MultiPolygon>::type ring_type;
+ std::vector<ring_type> rings;
+ BOOST_FOREACH(polygon_type const& polygon, multi_polygon)
+ {
+ rings.push_back(bg::exterior_ring(polygon));
+ }
+
+ test_dissolve_plusmin<MultiPolygon>(caseid + "_rings", rings,
+ expected_positive_area,
+ expected_negative_area);
+ }
+
+ // Test different combinations
+#define BOOST_GEOMETRY_TEST_PERMUTATIONS
+#ifdef BOOST_GEOMETRY_TEST_PERMUTATIONS
+
+ int n = multi_polygon.size();
+
+ // test them in all orders
+ std::vector<int> indices;
+ for (int i = 0; i < n; i++)
+ {
+ indices.push_back(i);
+ }
+ int permutation = 0;
+ do
+ {
+ std::ostringstream out;
+ out << caseid;
+ MultiPolygon multi_polygon2;
+ for (int i = 0; i < n; i++)
+ {
+ int index = indices[i];
+ out << "_" << index;
+ multi_polygon2.push_back(multi_polygon[index]);
+ }
+ test_dissolve_plusmin<MultiPolygon>(out.str(), multi_polygon2, expected_positive_area,
+ expected_negative_area);
+ } while (std::next_permutation(indices.begin(), indices.end()));
+#endif
+}
+
+template <typename Point>
+void test_all()
+{
+ namespace bg = boost::geometry;
+ typedef bg::polygon<Point> polygon;
+ typedef bg::multi_polygon<polygon> multi_polygon;
+
+ test_geometry<multi_polygon>("simplex_one",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)))",
+ 7.5);
+
+ test_geometry<multi_polygon>("simplex_two",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((2 2,3 6,6 3,2 2)))",
+ 14.7);
+ test_geometry<multi_polygon>("simplex_three",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((2 2,3 6,6 3,2 2)),((3 4,5 6,6 2,3 4)))",
+ 16.7945);
+ test_geometry<multi_polygon>("simplex_four",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((2 2,3 6,6 3,2 2)),((3 4,5 6,6 2,3 4)),((5 5,7 7,8 4,5 5)))",
+ 20.7581);
+
+ // disjoint
+ test_geometry<multi_polygon>("simplex_disjoint",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((1 6,2 10,5 7,1 6)),((3 4,5 6,6 2,3 4)),((6 5,8 7,9 4,6 5)))",
+ 24.0);
+
+ // new hole of four
+ test_geometry<multi_polygon>("new_hole",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((2 2,3 6,6 3,2 2)),((3 4,5 6,6 2,3 4)),((3 1,5 4,8 4,3 1)))",
+ 19.5206);
+
+ // intersection of positive/negative ring
+ test_geometry<multi_polygon>("plus_min_one",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((2 2,6 3,3 6,2 2)))",
+ 7.5, -7.2);
+
+ // negative ring within a positive ring
+ test_geometry<multi_polygon>("plus_min_one_within",
+ "MULTIPOLYGON(((0 0,1 7,7 3,0 0)),((1 2,4 4,2 5,1 2)))",
+ 23.0, -3.5);
+
+ // from buffer
+ test_geometry<multi_polygon>("from_buffer_1",
+ "MULTIPOLYGON(((2.4 3.03431,1.71716 3.71716,2.4 4,2.4 3.03431))"
+ ",((2.4 1.96569,2.4 1,1.71716 1.28284,2.4 1.96569))"
+ ",((2.93431 2.5,2.4 3.03431,2.4 1.96569,2.93431 2.5))"
+ ",((3.06569 2.5,3 2.43431,2.93431 2.5,3 2.56569,3.06569 2.5))"
+ ",((-0.4 5.4,4.4 5.4,4.4 3.83431,3.06569 2.5,4.4 1.16569,4.4 -0.4,-0.4 -0.4,-0.4 5.4)))"
+ ,
+ 26.0596168239, -0.2854871761);
+
+}
+
+int test_main(int, char* [])
+{
+ test_all<boost::geometry::point_xy<double> >();
+ return 0;
+}
+
+

Added: sandbox/geometry/libs/geometry/test/algorithms/overlay/dissolver.vcproj
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/algorithms/overlay/dissolver.vcproj 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="dissolver"
+ ProjectGUID="{6CCB145C-C682-4B9F-8672-6D04DB5C76DD}"
+ RootNamespace="dissolver"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\dissolver"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TEST_WITH_SVG"
+ MinimalRebuild="true"
+ ExceptionHandling="2"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\dissolver"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\dissolver.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: sandbox/geometry/libs/geometry/test/algorithms/overlay/overlay.sln
==============================================================================
--- sandbox/geometry/libs/geometry/test/algorithms/overlay/overlay.sln (original)
+++ sandbox/geometry/libs/geometry/test/algorithms/overlay/overlay.sln 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -14,6 +14,10 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assemble", "assemble.vcproj", "{306E829F-ACEC-42D5-B1D4-2531B2F56EA3}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "split_rings", "split_rings.vcproj", "{271231F9-F7DA-4218-8538-0E9DCD688D09}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dissolver", "dissolver.vcproj", "{6CCB145C-C682-4B9F-8672-6D04DB5C76DD}"
+EndProject
 Global
         GlobalSection(SolutionConfigurationPlatforms) = preSolution
                 Debug|Win32 = Debug|Win32
@@ -48,6 +52,14 @@
                 {306E829F-ACEC-42D5-B1D4-2531B2F56EA3}.Debug|Win32.Build.0 = Debug|Win32
                 {306E829F-ACEC-42D5-B1D4-2531B2F56EA3}.Release|Win32.ActiveCfg = Release|Win32
                 {306E829F-ACEC-42D5-B1D4-2531B2F56EA3}.Release|Win32.Build.0 = Release|Win32
+ {271231F9-F7DA-4218-8538-0E9DCD688D09}.Debug|Win32.ActiveCfg = Debug|Win32
+ {271231F9-F7DA-4218-8538-0E9DCD688D09}.Debug|Win32.Build.0 = Debug|Win32
+ {271231F9-F7DA-4218-8538-0E9DCD688D09}.Release|Win32.ActiveCfg = Release|Win32
+ {271231F9-F7DA-4218-8538-0E9DCD688D09}.Release|Win32.Build.0 = Release|Win32
+ {6CCB145C-C682-4B9F-8672-6D04DB5C76DD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6CCB145C-C682-4B9F-8672-6D04DB5C76DD}.Debug|Win32.Build.0 = Debug|Win32
+ {6CCB145C-C682-4B9F-8672-6D04DB5C76DD}.Release|Win32.ActiveCfg = Release|Win32
+ {6CCB145C-C682-4B9F-8672-6D04DB5C76DD}.Release|Win32.Build.0 = Release|Win32
         EndGlobalSection
         GlobalSection(SolutionProperties) = preSolution
                 HideSolutionNode = FALSE

Added: sandbox/geometry/libs/geometry/test/algorithms/overlay/split_rings.cpp
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/algorithms/overlay/split_rings.cpp 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,121 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library) test file
+//
+// Copyright Barend Gehrels 2007-2009, Geodan, Amsterdam, the Netherlands
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <iomanip>
+#include <string>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/split_rings.hpp>
+#include <boost/geometry/algorithms/area.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/extensions/gis/io/wkt/read_wkt.hpp>
+#include <boost/geometry/extensions/gis/io/wkt/write_wkt.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+#endif
+
+
+struct test_split_rings
+{
+ template <typename Geometry>
+ static void apply(std::string const& id,
+ Geometry const& geometry,
+ int expected_ring_count,
+ double precision)
+ {
+ namespace bg = boost::geometry;
+
+ typedef typename bg::ring_type<Geometry>::type ring_type;
+ std::vector<ring_type> rings;
+ bg::split_rings(geometry, rings);
+
+ BOOST_CHECK_EQUAL(rings.size(), expected_ring_count);
+
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "split_rings_" << id << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<typename bg::point_type<Geometry>::type> mapper(svg, 500, 500);
+ mapper.add(geometry);
+
+ mapper.map(geometry, "fill:rgb(255,255,128);stroke:rgb(0,0,0);stroke-width:1");
+
+ BOOST_FOREACH(ring_type const& ring, rings)
+ {
+ std::string style = "opacity:0.6;fill:rgb";
+ std::string color = bg::area(ring) > 0 ? "(255,0,0)" : "(0,0,255)";
+ mapper.map(ring, style + color + ";stroke:rgb(128,128,128);stroke-width:3");
+ }
+ }
+#endif
+ }
+};
+
+
+template <typename Geometry>
+void test_geometry(std::string const& caseid,
+ std::string const& wkt,
+ int expected_ring_count, double precision = 0.001)
+{
+ if (wkt.empty())
+ {
+ return;
+ }
+
+ Geometry geometry;
+ boost::geometry::read_wkt(wkt, geometry);
+
+ test_split_rings::apply(caseid, geometry, expected_ring_count, precision);
+}
+
+
+#if ! defined(GEOMETRY_TEST_MULTI)
+
+template <typename P>
+void test_self_all()
+{
+ typedef boost::geometry::polygon<P> polygon;
+
+ // Simplex
+
+ test_geometry<polygon>("1", "POLYGON((0 0,0 10,10 10,5 2,5 8,10 0,0 0))", 2);
+
+ // From "mill" (flower)
+ test_geometry<polygon>("2",
+ "POLYGON((5 6.10557,3.64223 8.82111,4.28284 8.71716,2.28284 6.71716,2.17889 7.35777,4.89443 6,2.17889 4.64223,2.28284 5.28284,4.28284 3.28284,3.62547 3.14045,5 6.10557))",
+ 5);
+
+ test_geometry<polygon>("3",
+ "POLYGON((0.6 10.4,9.4 10.4,9.4 -0.4,7.59 -0.4,4.59 5.33667,4.25383 5.6797,2.67526 4.89042,4.28284 3.28284,3.62547 3.14045,5.15 7.20587,5.15 -0.4,0.6 -0.4,0.6 10.4))",
+ 4);
+
+ test_geometry<polygon>("4",
+ "POLYGON((0.6 10.4,9.4 10.4,9.4 -0.4,4.59 -0.4,4.59 5.5,4.70431 5.22003,3.93716 6.00284,5 7.06569,6.06284 6.00284,5.29569 5.22003,5.41 5.5,5.41 0.01,5.01 0.41,5.25 0.41,4.85 0.01,4.85 7.20587,6.37453 3.14045,5.71716 3.28284,7.71716 5.28284,7.82111 4.64223,5.10557 6,7.82111 7.35777,7.71716 6.71716,5.71716 8.71716,6.35777 8.82111,5 6.10557,3.64223 8.82111,4.28284 8.71716,2.28284 6.71716,2.17889 7.35777,4.89443 6,2.17889 4.64223,2.28284 5.28284,4.28284 3.28284,3.62547 3.14045,5.15 7.20587,5.15 -0.4,0.6 -0.4,0.6 10.4))",
+ 21);
+}
+#endif
+
+
+
+#if ! defined(GEOMETRY_TEST_MULTI)
+int test_main(int, char* [])
+{
+ test_self_all<boost::geometry::point_xy<double> >();
+ return 0;
+}
+#endif

Added: sandbox/geometry/libs/geometry/test/algorithms/overlay/split_rings.vcproj
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/algorithms/overlay/split_rings.vcproj 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="split_rings"
+ ProjectGUID="{271231F9-F7DA-4218-8538-0E9DCD688D09}"
+ RootNamespace="split_rings"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\split_rings"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TEST_WITH_SVG"
+ MinimalRebuild="true"
+ ExceptionHandling="2"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\split_rings"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\split_rings.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: sandbox/geometry/libs/geometry/test/algorithms/sectionalize.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/algorithms/sectionalize.cpp (original)
+++ sandbox/geometry/libs/geometry/test/algorithms/sectionalize.cpp 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -21,17 +21,53 @@
 
 #include <test_common/test_point.hpp>
 
+
+namespace bg = boost::geometry;
+
+
+template <int DimensionCount, typename Geometry>
+void test_sectionalize_part()
+{
+ typedef typename bg::point_type<Geometry>::type point_type;
+ typedef bg::box<point_type> box_type;
+
+ typedef bg::sections<box_type, DimensionCount> sections_type;
+ typedef typename boost::range_value<sections_type>::type section_type;
+
+ typedef bg::detail::sectionalize::sectionalize_part
+ <
+ Geometry, point_type, sections_type, 1, 10
+ > sectionalize_part;
+
+ sections_type sections;
+ section_type section;
+
+
+ Geometry geometry;
+ geometry.push_back(bg::make<point_type>(1, 1));
+
+ int index = 0;
+ int ndi = 0;
+ sectionalize_part::apply(sections, section, index, ndi, geometry);
+ // There should not yet be anything generated, because it is only ONE point
+
+ geometry.push_back(bg::make<point_type>(2, 2));
+ sectionalize_part::apply(sections, section, index, ndi, geometry);
+
+}
+
+
 template <int DimensionCount, typename G>
 void test_sectionalize(G const& g, std::size_t section_count,
         std::string const& index_check, std::string const& dir_check,
         bool sort = false)
 {
- typedef typename boost::geometry::point_type<G>::type point;
- typedef boost::geometry::box<point> box;
- typedef boost::geometry::sections<box, DimensionCount> sections;
+ typedef typename bg::point_type<G>::type point;
+ typedef bg::box<point> box;
+ typedef bg::sections<box, DimensionCount> sections;
 
     sections s;
- boost::geometry::sectionalize(g, s);
+ bg::sectionalize(g, s);
 
     BOOST_CHECK_EQUAL(s.size(), section_count);
 
@@ -65,8 +101,8 @@
         }
 
         out_sections << s[i].begin_index << ".." << s[i].end_index;
- out_boxes << boost::geometry::get<0,0>(b) << " " << boost::geometry::get<0,1>(b)
- << ".." << boost::geometry::get<1,0>(b) << " " << boost::geometry::get<1,1>(b);
+ out_boxes << bg::get<0,0>(b) << " " << bg::get<0,1>(b)
+ << ".." << bg::get<1,0>(b) << " " << bg::get<1,1>(b);
         for (int d = 0; d < DimensionCount; d++)
         {
             out_dirs << (d == 0 ? "" : " ");
@@ -92,7 +128,7 @@
     {
         if (out_sections.str().length() < 80)
         {
- std::cout << std::endl << boost::geometry::wkt(g) << std::endl;
+ std::cout << std::endl << bg::wkt(g) << std::endl;
             std::cout << out_sections.str() << std::endl;
             //std::cout << out_boxes.str() << std::endl;
         }
@@ -107,7 +143,7 @@
         bool sort = false)
 {
     G g;
- boost::geometry::read_wkt(wkt, g);
+ bg::read_wkt(wkt, g);
     test_sectionalize<2>(g, count2, s2, d2, sort);
     test_sectionalize<1>(g, count1, s1, d1, sort);
 }
@@ -115,57 +151,59 @@
 template <typename P>
 void test_all()
 {
- test_sectionalize<boost::geometry::linestring<P> >(
+ test_sectionalize_part<1, bg::linestring<P> >();
+
+ test_sectionalize<bg::linestring<P> >(
         "LINESTRING(1 1,2 2,3 0,5 0,5 8)",
         4, "0..1|1..2|2..3|3..4", "+ +|+ -|+ .|. +",
         2, "0..3|3..4", "+|.");
 
- test_sectionalize<boost::geometry::polygon<P> >(
+ test_sectionalize<bg::polygon<P> >(
         "POLYGON((0 0,0 7,4 2,2 0,0 0))",
         4, "0..1|1..2|2..3|3..4", ". +|+ -|- -|- .",
         // . + - - -> 3 sections
         3, "0..1|1..2|2..4", ".|+|-");
 
- test_sectionalize<boost::geometry::polygon<P> >
+ test_sectionalize<bg::polygon<P> >
         ("polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0, 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))",
         8, "0..2|2..3|3..4|4..5|5..6|6..8|8..10|10..11", "+ +|+ -|+ +|- +|+ +|+ -|- -|- +",
         4, "0..4|4..5|5..8|8..11", "+|-|+|-");
 
 
- test_sectionalize<boost::geometry::polygon<P> >(
+ test_sectionalize<bg::polygon<P> >(
         "POLYGON((3 1,2 2,1 3,2 4,3 5,4 4,5 3,4 2,3 1))",
         4, "0..2|2..4|4..6|6..8", "- +|+ +|+ -|- -",
         // - - - + + + + - - -> 3 sections
         3, "0..2|2..6|6..8", "-|+|-");
 
     // With holes
- test_sectionalize<boost::geometry::polygon<P> >(
+ test_sectionalize<bg::polygon<P> >(
         "POLYGON((3 1,2 2,1 3,2 4,3 5,4 4,5 3,4 2,3 1), (3 2,2 2,3 4,3 2))",
         7, "0..2|2..4|4..6|6..8|0..1|1..2|2..3", "- +|+ +|+ -|- -|- .|+ +|. -",
         // - - - + + + + - - - + . -> 6 sections
         6, "0..2|2..6|6..8|0..1|1..2|2..3", "-|+|-|-|+|.");
 
     // With duplicates
- test_sectionalize<boost::geometry::linestring<P> >(
+ test_sectionalize<bg::linestring<P> >(
         "LINESTRING(1 1,2 2,3 0,3 0,5 0,5 8)",
         5, "0..1|1..2|2..3|3..4|4..5", "+ +|+ -|DUP DUP|+ .|. +",
         4, "0..2|2..3|3..4|4..5", "+|DUP|+|.");
     // With two subsequent duplicate segments
- test_sectionalize<boost::geometry::linestring<P> >(
+ test_sectionalize<bg::linestring<P> >(
         "LINESTRING(1 1,2 2,3 0,3 0,3 0,5 0,5 0,5 0,5 0,5 8)",
         6, "0..1|1..2|2..4|4..5|5..8|8..9", "+ +|+ -|DUP DUP|+ .|DUP DUP|. +",
         5, "0..2|2..4|4..5|5..8|8..9", "+|DUP|+|DUP|.");
 
 
- typedef boost::geometry::box<P> B;
- test_sectionalize<2, B>(boost::geometry::make<B>(0,0,4,4),
+ typedef bg::box<P> B;
+ test_sectionalize<2, B>(bg::make<B>(0,0,4,4),
             4, "0..1|1..2|2..3|3..4", ". +|+ .|. -|- .");
- test_sectionalize<1, B>(boost::geometry::make<B>(0,0,4,4),
+ test_sectionalize<1, B>(bg::make<B>(0,0,4,4),
             4, "0..1|1..2|2..3|3..4", ".|+|.|-");
 
     return;
     // Buffer-case
- test_sectionalize<boost::geometry::polygon<P> >(
+ test_sectionalize<bg::polygon<P> >(
     "POLYGON((-1.1713 0.937043,2.8287 5.93704,2.90334 6.02339,2.98433 6.10382,2.98433 6.10382,3.07121 6.17786,3.16346 6.24507,3.16346 6.24507,3.16346 6.24507,3.26056 6.30508,3.36193 6.35752,3.36193 6.35752,3.46701 6.40211,3.57517 6.43858,3.57517 6.43858,3.57517 6.43858,3.57517 6.43858,3.68579 6.46672,3.79822 6.48637,3.79822 6.48637,3.91183 6.49741,4.02595 6.49978,4.02595 6.49978,4.02595 6.49978,4.13991 6.49346,4.25307 6.4785,4.25307 6.4785,4.36476 6.45497,4.47434 6.42302,4.47434 6.42302,4.47434 6.42302,4.47434 6.42302,7.47434 5.42302,6.84189 3.52566,4.39043 4.68765,0.390434 -0.312348,-1.1713 0.937043))",
         8, "0..2|2..3|3..4|4..5|5..6|6..8|8..10|10..11", "+ +|+ -|+ +|- +|+ +|+ -|- -|- +",
         4, "0..4|4..5|5..8|8..11", "+|-|+|-");
@@ -173,7 +211,7 @@
 
 int test_main(int, char* [])
 {
- //test_all<boost::geometry::point_xy<float> >();
+ //test_all<bg::point_xy<float> >();
     test_all<boost::geometry::point_xy<double> >();
 
     return 0;

Modified: sandbox/geometry/libs/geometry/test/algorithms/test_difference.hpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/algorithms/test_difference.hpp (original)
+++ sandbox/geometry/libs/geometry/test/algorithms/test_difference.hpp 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -75,7 +75,7 @@
 
 
 #if ! defined(BOOST_GEOMETRY_NO_BOOST_TEST)
- if (expected_point_count > 0)
+ /*if (expected_point_count > 0)
     {
         BOOST_CHECK_MESSAGE(n == expected_point_count,
                 "difference: " << caseid
@@ -83,7 +83,7 @@
                 << " detected: " << n
                 << " type: " << string_from_type<coordinate_type>::name()
                 );
- }
+ }*/
 
     if (expected_count > 0)
     {
@@ -129,15 +129,23 @@
 #endif
 }
 
+
+#ifdef BOOST_GEOMETRY_CHECK_WITH_POSTGIS
+static int counter = 0;
+#endif
+
+
 template <typename OutputType, typename G1, typename G2>
 void test_one(std::string const& caseid,
         std::string const& wkt1, std::string const& wkt2,
         std::size_t expected_count1,
         std::size_t expected_point_count1,
         double expected_area1,
+
         std::size_t expected_count2,
         std::size_t expected_point_count2,
         double expected_area2,
+
         double percentage = 0.0001)
 {
     G1 g1;
@@ -157,6 +165,39 @@
         expected_point_count1 + expected_point_count2,
         expected_area1 + expected_area2,
         percentage, true);
+
+#ifdef BOOST_GEOMETRY_CHECK_WITH_POSTGIS
+ std::cout
+ << (counter > 0 ? "union " : "")
+ << "select " << counter++
+ << ", '" << caseid << "' as caseid"
+ << ", ST_NumPoints(ST_Difference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ << ", ST_NumGeometries(ST_Difference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ << ", ST_Area(ST_Difference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ //<< ", " << expected_area1 << " as expected_area_a"
+ //<< ", " << expected_count1 << " as expected_count_a"
+ << ", ST_NumPoints(ST_Difference(ST_GeomFromText('" << wkt2 << "'), "
+ << " ST_GeomFromText('" << wkt1 << "'))) "
+ << ", ST_NumGeometries(ST_Difference(ST_GeomFromText('" << wkt2 << "'), "
+ << " ST_GeomFromText('" << wkt1 << "'))) "
+ << ", ST_Area(ST_Difference(ST_GeomFromText('" << wkt2 << "'), "
+ << " ST_GeomFromText('" << wkt1 << "'))) "
+ //<< ", " << expected_area2 << " as expected_area_b"
+ //<< ", " << expected_count2 << " as expected_count_b"
+ << ", ST_NumPoints(ST_SymDifference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ << ", ST_NumGeometries(ST_SymDifference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ << ", ST_Area(ST_SymDifference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ //<< ", " << expected_area1 + expected_area2 << " as expected_area_s"
+ //<< ", " << expected_count1 + expected_count2 << " as expected_count_s"
+ << std::endl;
+#endif
+
 }
 
 

Modified: sandbox/geometry/libs/geometry/test/extensions/algorithms/extension_algorithms.sln
==============================================================================
--- sandbox/geometry/libs/geometry/test/extensions/algorithms/extension_algorithms.sln (original)
+++ sandbox/geometry/libs/geometry/test/extensions/algorithms/extension_algorithms.sln 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -7,6 +7,8 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "selected", "selected.vcproj", "{22DD12E5-4AAD-4066-9C4F-4C360F7759AA}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "remove_spikes", "remove_spikes.vcproj", "{3EA21C81-DE4A-410D-AABE-CDC5091DAB6E}"
+EndProject
 Global
         GlobalSection(SolutionConfigurationPlatforms) = preSolution
                 Debug|Win32 = Debug|Win32
@@ -25,6 +27,10 @@
                 {22DD12E5-4AAD-4066-9C4F-4C360F7759AA}.Debug|Win32.Build.0 = Debug|Win32
                 {22DD12E5-4AAD-4066-9C4F-4C360F7759AA}.Release|Win32.ActiveCfg = Release|Win32
                 {22DD12E5-4AAD-4066-9C4F-4C360F7759AA}.Release|Win32.Build.0 = Release|Win32
+ {3EA21C81-DE4A-410D-AABE-CDC5091DAB6E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3EA21C81-DE4A-410D-AABE-CDC5091DAB6E}.Debug|Win32.Build.0 = Debug|Win32
+ {3EA21C81-DE4A-410D-AABE-CDC5091DAB6E}.Release|Win32.ActiveCfg = Release|Win32
+ {3EA21C81-DE4A-410D-AABE-CDC5091DAB6E}.Release|Win32.Build.0 = Release|Win32
         EndGlobalSection
         GlobalSection(SolutionProperties) = preSolution
                 HideSolutionNode = FALSE

Added: sandbox/geometry/libs/geometry/test/extensions/algorithms/remove_spikes.cpp
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/extensions/algorithms/remove_spikes.cpp 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,103 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library) test file
+//
+// Copyright Barend Gehrels 2010, Geodan, Amsterdam, the Netherlands
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <iomanip>
+#include <string>
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/extensions/algorithms/remove_spikes.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+#include <boost/geometry/algorithms/unique.hpp>
+
+#include <boost/geometry/extensions/gis/io/wkt/read_wkt.hpp>
+#include <boost/geometry/extensions/gis/io/wkt/write_wkt.hpp>
+
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+#endif
+
+template <typename Geometry>
+inline void test_remove_spikes(std::string const& id,
+ Geometry const& geometry,
+ int expected_count)
+{
+ namespace bg = boost::geometry;
+
+ typedef typename bg::point_type<Geometry>::type point_type;
+
+ Geometry processed = geometry;
+ //bg::remove_spikes(processed, bg::remove_elongated_spikes<point_type>());
+ bg::remove_spikes(processed, bg::remove_by_normalized<point_type>());
+ bg::unique(processed);
+
+
+ int detected = bg::num_points(processed);
+
+ BOOST_CHECK_MESSAGE(detected == expected_count,
+ "remove_spikes: " << bg::wkt(geometry)
+ << " -> Expected: " << expected_count
+ << " detected: " << detected);
+
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "remove_spikes_" << id << ".svg";
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<typename bg::point_type<Geometry>::type> mapper(svg, 500, 500);
+ mapper.add(geometry);
+ mapper.map(geometry, "opacity:0.6;fill:rgb(0,0,255);stroke:rgb(0,0,255);stroke-width:1");
+ mapper.map(processed, "opacity:0.6;fill:rgb(0,255,0);stroke:rgb(0,255,0);stroke-width:1");
+ }
+#endif
+}
+
+template <typename Geometry>
+void test_geometry(std::string const& id, std::string const& wkt, int expected_count)
+{
+ Geometry geometry;
+ boost::geometry::read_wkt(wkt, geometry);
+ test_remove_spikes(id, geometry, expected_count);
+}
+
+
+#if ! defined(GGL_TEST_MULTI)
+
+template <typename P>
+void test_all()
+{
+ typedef boost::geometry::linear_ring<P> ring;
+ typedef boost::geometry::polygon<P> polygon;
+
+ test_geometry<polygon>("box",
+ "POLYGON((0 0,0 4,4 4,4 0,0 0))", 5);
+ test_geometry<polygon>("spike_right",
+ "POLYGON((0 0,0 4,4 4,4 2,6 2,4 2,4 0,0 0))", 6);
+ test_geometry<polygon>("spike_at_first",
+ "POLYGON((0 0,-1 3,0 0,0 4,4 4,4 0,0 0))", 5);
+ test_geometry<polygon>("spike_at_closing",
+ "POLYGON((-1 0,0 0,0 4,4 4,4 0,0 0,-1 0))", 5);
+ test_geometry<polygon>("double_spike",
+ "POLYGON((0 0,0 4,4 4,4 2,6 2,5 2,4 2,4 0,0 0))", 6);
+ test_geometry<polygon>("three_double_spike",
+ "POLYGON((0 0,0 4,4 4,4 2,6 2,5 2,4.5 2,4 2,4 0,0 0))", 6);
+}
+
+int test_main(int, char* [])
+{
+ test_all<boost::geometry::point_xy<double> >();
+ return 0;
+}
+#endif

Added: sandbox/geometry/libs/geometry/test/extensions/algorithms/remove_spikes.vcproj
==============================================================================
--- (empty file)
+++ sandbox/geometry/libs/geometry/test/extensions/algorithms/remove_spikes.vcproj 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="remove_spikes"
+ ProjectGUID="{3EA21C81-DE4A-410D-AABE-CDC5091DAB6E}"
+ RootNamespace="remove_spikes"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\remove_spikes"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TEST_WITH_SVG"
+ MinimalRebuild="true"
+ ExceptionHandling="2"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\remove_spikes"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\remove_spikes.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: sandbox/geometry/libs/geometry/test/multi/algorithms/overlay/multi_svg_mapper.hpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/multi/algorithms/overlay/multi_svg_mapper.hpp (original)
+++ sandbox/geometry/libs/geometry/test/multi/algorithms/overlay/multi_svg_mapper.hpp 2010-04-03 09:39:20 EDT (Sat, 03 Apr 2010)
@@ -15,6 +15,9 @@
 
 #include <boost/geometry/extensions/io/svg/write_svg_multi.hpp>
 
+namespace boost { namespace geometry
+{
+
 #ifndef DOXYGEN_NO_DISPATCH
 namespace dispatch
 {
@@ -40,5 +43,7 @@
 #endif
 
 
+}} // namespace boost::geometry
+
 
 #endif // GEOMETRY_TEST_MULTI_UTIL_SVG_MAPPER_HPP


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk