|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r67374 - in sandbox/geometry/boost/geometry: algorithms algorithms/detail/overlay core multi/algorithms/detail/overlay multi/core
From: barend.gehrels_at_[hidden]
Date: 2010-12-20 16:25:24
Author: barendgehrels
Date: 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
New Revision: 67374
URL: http://svn.boost.org/trac/boost/changeset/67374
Log:
Added Reverse to copy_segment_point.hpp,
and therefore, to enrich_intersection_points.hpp, handle_tangencies.hpp
Protected point_order with MPL_ASSERT
Text files modified:
sandbox/geometry/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp | 66 ++++++++++++++++++++++++++-------------
sandbox/geometry/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp | 25 +++++++-------
sandbox/geometry/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp | 41 +++++++++++++-----------
sandbox/geometry/boost/geometry/algorithms/detail/overlay/overlay.hpp | 2
sandbox/geometry/boost/geometry/algorithms/dissolve.hpp | 4 +-
sandbox/geometry/boost/geometry/algorithms/intersection.hpp | 8 ++--
sandbox/geometry/boost/geometry/algorithms/union.hpp | 8 ++--
sandbox/geometry/boost/geometry/core/point_order.hpp | 38 ++++++++++++++++++++++
sandbox/geometry/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp | 3 +
sandbox/geometry/boost/geometry/multi/core/point_order.hpp | 9 +++++
10 files changed, 139 insertions(+), 65 deletions(-)
Modified: sandbox/geometry/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp (original)
+++ sandbox/geometry/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
@@ -17,7 +17,8 @@
#include <boost/geometry/core/exterior_ring.hpp>
#include <boost/geometry/core/interior_rings.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/iterators/range_type.hpp>
+#include <boost/geometry/views/closeable_view.hpp>
+#include <boost/geometry/views/reversible_view.hpp>
namespace boost { namespace geometry
@@ -29,9 +30,21 @@
{
-template <typename Range, typename SegmentIdentifier, typename PointOut>
+template <typename Range, bool Reverse, typename SegmentIdentifier, typename PointOut>
struct copy_segment_point_range
{
+ typedef typename closeable_view
+ <
+ Range const,
+ closure<Range>::value
+ >::type cview_type;
+
+ typedef typename reversible_view
+ <
+ cview_type const,
+ Reverse ? iterate_reverse : iterate_forward
+ >::type rview_type;
+
static inline bool apply(Range const& range,
SegmentIdentifier const& seg_id, bool second,
PointOut& point)
@@ -52,13 +65,17 @@
return false;
}
- geometry::copy_coordinates(range[index], point);
+ cview_type cview(range);
+ rview_type view(cview);
+
+
+ geometry::copy_coordinates(*(boost::begin(view) + index), point);
return true;
}
};
-template <typename Polygon, typename SegmentIdentifier, typename PointOut>
+template <typename Polygon, bool Reverse, typename SegmentIdentifier, typename PointOut>
struct copy_segment_point_polygon
{
static inline bool apply(Polygon const& polygon,
@@ -69,6 +86,7 @@
return copy_segment_point_range
<
typename geometry::ring_type<Polygon>::type,
+ Reverse,
SegmentIdentifier,
PointOut
>::apply
@@ -126,6 +144,7 @@
<
typename Tag,
typename GeometryIn,
+ bool Reverse,
typename SegmentIdentifier,
typename PointOut
>
@@ -139,34 +158,34 @@
};
-template <typename LineString, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point<linestring_tag, LineString, SegmentIdentifier, PointOut>
+template <typename LineString, bool Reverse, typename SegmentIdentifier, typename PointOut>
+struct copy_segment_point<linestring_tag, LineString, Reverse, SegmentIdentifier, PointOut>
: detail::copy_segments::copy_segment_point_range
<
- LineString, SegmentIdentifier, PointOut
+ LineString, Reverse, SegmentIdentifier, PointOut
>
{};
-template <typename Ring, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point<ring_tag, Ring, SegmentIdentifier, PointOut>
+template <typename Ring, bool Reverse, typename SegmentIdentifier, typename PointOut>
+struct copy_segment_point<ring_tag, Ring, Reverse, SegmentIdentifier, PointOut>
: detail::copy_segments::copy_segment_point_range
<
- Ring, SegmentIdentifier, PointOut
+ Ring, Reverse, SegmentIdentifier, PointOut
>
{};
-template <typename Polygon, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point<polygon_tag, Polygon, SegmentIdentifier, PointOut>
+template <typename Polygon, bool Reverse, typename SegmentIdentifier, typename PointOut>
+struct copy_segment_point<polygon_tag, Polygon, Reverse, SegmentIdentifier, PointOut>
: detail::copy_segments::copy_segment_point_polygon
<
- Polygon, SegmentIdentifier, PointOut
+ Polygon, Reverse, SegmentIdentifier, PointOut
>
{};
-template <typename Box, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point<box_tag, Box, SegmentIdentifier, PointOut>
+template <typename Box, bool Reverse, typename SegmentIdentifier, typename PointOut>
+struct copy_segment_point<box_tag, Box, Reverse, SegmentIdentifier, PointOut>
: detail::copy_segments::copy_segment_point_box
<
Box, SegmentIdentifier, PointOut
@@ -186,7 +205,7 @@
\brief Helper function, copies a point from a segment
\ingroup overlay
*/
-template<typename Geometry, typename SegmentIdentifier, typename PointOut>
+template<bool Reverse, typename Geometry, typename SegmentIdentifier, typename PointOut>
inline bool copy_segment_point(Geometry const& geometry,
SegmentIdentifier const& seg_id, bool second,
PointOut& point_out)
@@ -197,6 +216,7 @@
<
typename tag<Geometry>::type,
Geometry,
+ Reverse,
SegmentIdentifier,
PointOut
>::apply(geometry, seg_id, second, point_out);
@@ -210,8 +230,8 @@
*/
template
<
- typename Geometry1,
- typename Geometry2,
+ bool Reverse1, bool Reverse2,
+ typename Geometry1, typename Geometry2,
typename SegmentIdentifier,
typename PointOut
>
@@ -228,6 +248,7 @@
<
typename tag<Geometry1>::type,
Geometry1,
+ Reverse1,
SegmentIdentifier,
PointOut
>::apply(geometry1, seg_id, second, point_out);
@@ -238,6 +259,7 @@
<
typename tag<Geometry2>::type,
Geometry2,
+ Reverse2,
SegmentIdentifier,
PointOut
>::apply(geometry2, seg_id, second, point_out);
@@ -254,8 +276,8 @@
*/
template
<
- typename Geometry1,
- typename Geometry2,
+ bool Reverse1, bool Reverse2,
+ typename Geometry1, typename Geometry2,
typename SegmentIdentifier,
typename PointOut
>
@@ -266,8 +288,8 @@
concept::check<Geometry1 const>();
concept::check<Geometry2 const>();
- return copy_segment_point(geometry1, geometry2, seg_id, false, point1)
- && copy_segment_point(geometry1, geometry2, seg_id, true, point2);
+ return copy_segment_point<Reverse1, Reverse2>(geometry1, geometry2, seg_id, false, point1)
+ && copy_segment_point<Reverse1, Reverse2>(geometry1, geometry2, seg_id, true, point2);
}
Modified: sandbox/geometry/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp (original)
+++ sandbox/geometry/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
@@ -79,8 +79,8 @@
<
typename TurnPoints,
typename Indexed,
- typename Geometry1,
- typename Geometry2,
+ typename Geometry1, typename Geometry2,
+ bool Reverse1, bool Reverse2,
typename Strategy
>
struct sort_on_segment_and_distance
@@ -112,13 +112,13 @@
typedef typename geometry::point_type<Geometry1>::type point_type;
point_type pi, pj, ri, rj, si, sj;
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
left.subject.seg_id,
pi, pj);
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
left.subject.other_id,
ri, rj);
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
right.subject.other_id,
si, sj);
@@ -196,10 +196,10 @@
template
<
typename IndexType,
+ bool Reverse1, bool Reverse2,
typename Container,
typename TurnPoints,
- typename Geometry1,
- typename Geometry2,
+ typename Geometry1, typename Geometry2,
typename Strategy
>
inline void enrich_sort(Container& operations,
@@ -218,6 +218,7 @@
TurnPoints,
IndexType,
Geometry1, Geometry2,
+ Reverse1, Reverse2,
Strategy
>(turn_points, geometry1, geometry2, strategy, clustered));
@@ -252,14 +253,14 @@
}
else if (begin_cluster != boost::end(operations))
{
- handle_cluster<IndexType>(begin_cluster, it, turn_points,
+ handle_cluster<IndexType, Reverse1, Reverse2>(begin_cluster, it, turn_points,
for_operation, geometry1, geometry2, strategy);
begin_cluster = boost::end(operations);
}
}
if (begin_cluster != boost::end(operations))
{
- handle_cluster<IndexType>(begin_cluster, it, turn_points,
+ handle_cluster<IndexType, Reverse1, Reverse2>(begin_cluster, it, turn_points,
for_operation, geometry1, geometry2, strategy);
}
}
@@ -429,9 +430,9 @@
*/
template
<
+ bool Reverse1, bool Reverse2,
typename TurnPoints,
- typename Geometry1,
- typename Geometry2,
+ typename Geometry1, typename Geometry2,
typename Strategy
>
inline void enrich_intersection_points(TurnPoints& turn_points,
@@ -486,7 +487,7 @@
std::cout << "ENRICH-sort Ring "
<< mit->first << std::endl;
#endif
- detail::overlay::enrich_sort<indexed_turn_operation>(mit->second, turn_points, for_operation,
+ detail::overlay::enrich_sort<indexed_turn_operation, Reverse1, Reverse2>(mit->second, turn_points, for_operation,
geometry1, geometry2, strategy);
}
Modified: sandbox/geometry/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp (original)
+++ sandbox/geometry/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
@@ -27,8 +27,8 @@
<
typename TurnPoints,
typename Indexed,
- typename Geometry1,
- typename Geometry2,
+ typename Geometry1, typename Geometry2,
+ bool Reverse1, bool Reverse2,
typename Strategy
>
struct sort_in_cluster
@@ -101,13 +101,13 @@
#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
point_type pi, pj, ri, rj, si, sj;
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
left.subject.seg_id,
pi, pj);
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
left.subject.other_id,
ri, rj);
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
right.subject.other_id,
si, sj);
@@ -121,8 +121,8 @@
int const side_si_r = m_strategy.apply(ri, rj, si);
int const side_sj_r = m_strategy.apply(ri, rj, sj);
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
std::cout << "Case: " << header << " for " << left.index << " / " << right.index << std::endl;
+#ifdef BOOST_GEOMETRY_DEBUG_ENRICH_MORE
std::cout << " Segment p:" << geometry::wkt(pi) << " .. " << geometry::wkt(pj) << std::endl;
std::cout << " Segment r:" << geometry::wkt(ri) << " .. " << geometry::wkt(rj) << std::endl;
std::cout << " Segment s:" << geometry::wkt(si) << " .. " << geometry::wkt(sj) << std::endl;
@@ -174,9 +174,9 @@
}
else
{
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+//#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
std::cout << "ux/ux unhandled" << std::endl;
-#endif
+//#endif
}
//debug_consider(0, left, right, header, false, "-> return ", ret);
@@ -217,9 +217,9 @@
}
else
{
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+//#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
std::cout << " iu/ux unhandled" << std::endl;
-#endif
+//#endif
ret = order == 1;
}
@@ -263,13 +263,13 @@
}
point_type pi, pj, ri, rj, si, sj;
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
left.subject.seg_id,
pi, pj);
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
left.subject.other_id,
ri, rj);
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
right.subject.other_id,
si, sj);
@@ -301,9 +301,9 @@
debug_consider(0, left, right, header, false, "opp.", ret);
return ret;
}
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+//#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
std::cout << " iu/iu coming from opposite unhandled" << std::endl;
-#endif
+//#endif
}
// We need EXTRA information here: are p/r/s overlapping?
@@ -369,13 +369,13 @@
debug_consider(0, left, right, header);
point_type pi, pj, ri, rj, si, sj;
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
left.subject.seg_id,
pi, pj);
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
left.subject.other_id,
ri, rj);
- geometry::copy_segment_points(m_geometry1, m_geometry2,
+ geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
right.subject.other_id,
si, sj);
@@ -482,7 +482,8 @@
<< operation_char(m_turn_points[left.index].operations[1].operation)
<< "/" << operation_char(m_turn_points[right.index].operations[0].operation)
<< operation_char(m_turn_points[right.index].operations[1].operation)
- << " " << " Take " << left.index << " < " << right.index;
+ << " " << " Take " << left.index << " < " << right.index
+ << std::cout;
#endif
return default_order;
@@ -586,6 +587,7 @@
template
<
typename IndexType,
+ bool Reverse1, bool Reverse2,
typename Iterator,
typename TurnPoints,
typename Geometry1,
@@ -610,6 +612,7 @@
TurnPoints,
IndexType,
Geometry1, Geometry2,
+ Reverse1, Reverse2,
Strategy
>(turn_points, geometry1, geometry2, strategy));
Modified: sandbox/geometry/boost/geometry/algorithms/detail/overlay/overlay.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/algorithms/detail/overlay/overlay.hpp (original)
+++ sandbox/geometry/boost/geometry/algorithms/detail/overlay/overlay.hpp 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
@@ -109,7 +109,7 @@
std::cout << "enrich" << std::endl;
#endif
typename Strategy::side_strategy_type side_strategy;
- geometry::enrich_intersection_points(turn_points,
+ geometry::enrich_intersection_points<Reverse1, Reverse2>(turn_points,
Direction == -1
? boost::geometry::detail::overlay::operation_intersection
: boost::geometry::detail::overlay::operation_union,
Modified: sandbox/geometry/boost/geometry/algorithms/dissolve.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/algorithms/dissolve.hpp (original)
+++ sandbox/geometry/boost/geometry/algorithms/dissolve.hpp 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
@@ -76,7 +76,7 @@
typename cs_tag<Geometry>::type
>::type side_strategy_type;
- enrich_intersection_points(turns,
+ enrich_intersection_points<false, false>(turns,
detail::overlay::operation_union,
geometry, geometry,
side_strategy_type());
@@ -89,7 +89,7 @@
clear_visit_info(turns);
- enrich_intersection_points(turns,
+ enrich_intersection_points<false, false>(turns,
detail::overlay::operation_intersection,
geometry, geometry,
side_strategy_type());
Modified: sandbox/geometry/boost/geometry/algorithms/intersection.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/algorithms/intersection.hpp (original)
+++ sandbox/geometry/boost/geometry/algorithms/intersection.hpp 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
@@ -352,8 +352,8 @@
geometry::is_areal<Geometry2>::value,
geometry::is_areal<GeometryOut>::value,
Geometry1, Geometry2,
- overlay::do_reverse<point_order<Geometry1>::value, Reverse1>::value,
- overlay::do_reverse<point_order<Geometry2>::value, Reverse2>::value,
+ overlay::do_reverse<geometry::point_order<Geometry1>::value, Reverse1>::value,
+ overlay::do_reverse<geometry::point_order<Geometry2>::value, Reverse2>::value,
ReverseOut,
OutputIterator, GeometryOut,
Strategy
@@ -370,8 +370,8 @@
geometry::is_areal<Geometry2>::value,
geometry::is_areal<GeometryOut>::value,
Geometry1, Geometry2,
- overlay::do_reverse<point_order<Geometry1>::value, Reverse1>::value,
- overlay::do_reverse<point_order<Geometry2>::value, Reverse2>::value,
+ overlay::do_reverse<geometry::point_order<Geometry1>::value, Reverse1>::value,
+ overlay::do_reverse<geometry::point_order<Geometry2>::value, Reverse2>::value,
ReverseOut,
OutputIterator, GeometryOut,
Strategy
Modified: sandbox/geometry/boost/geometry/algorithms/union.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/algorithms/union.hpp (original)
+++ sandbox/geometry/boost/geometry/algorithms/union.hpp 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
@@ -134,8 +134,8 @@
geometry::is_areal<Geometry2>::value,
geometry::is_areal<GeometryOut>::value,
Geometry1, Geometry2,
- overlay::do_reverse<point_order<Geometry1>::value, Reverse1>::value,
- overlay::do_reverse<point_order<Geometry2>::value, Reverse2>::value,
+ overlay::do_reverse<geometry::point_order<Geometry1>::value, Reverse1>::value,
+ overlay::do_reverse<geometry::point_order<Geometry2>::value, Reverse2>::value,
ReverseOut,
OutputIterator, GeometryOut,
Strategy
@@ -149,8 +149,8 @@
geometry::is_areal<Geometry2>::value,
geometry::is_areal<GeometryOut>::value,
Geometry1, Geometry2,
- overlay::do_reverse<point_order<Geometry1>::value, Reverse1>::value,
- overlay::do_reverse<point_order<Geometry2>::value, Reverse2>::value,
+ overlay::do_reverse<geometry::point_order<Geometry1>::value, Reverse1>::value,
+ overlay::do_reverse<geometry::point_order<Geometry2>::value, Reverse2>::value,
ReverseOut,
OutputIterator, GeometryOut,
Strategy
Modified: sandbox/geometry/boost/geometry/core/point_order.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/core/point_order.hpp (original)
+++ sandbox/geometry/boost/geometry/core/point_order.hpp 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
@@ -9,6 +9,7 @@
#define BOOST_GEOMETRY_CORE_POINT_ORDER_HPP
+#include <boost/mpl/assert.hpp>
#include <boost/range.hpp>
#include <boost/type_traits/remove_const.hpp>
@@ -43,6 +44,21 @@
} // namespace traits
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail { namespace point_order
+{
+
+struct clockwise
+{
+ static const order_selector value = geometry::clockwise;
+};
+
+
+}} // namespace detail::point_order
+#endif // DOXYGEN_NO_DETAIL
+
+
+
#ifndef DOXYGEN_NO_DISPATCH
namespace core_dispatch
{
@@ -50,9 +66,29 @@
template <typename Tag, typename Geometry>
struct point_order
{
- static const order_selector value = clockwise;
+ BOOST_MPL_ASSERT_MSG
+ (
+ false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
+ , (types<Geometry>)
+ );
};
+template <typename Point>
+struct point_order<point_tag, Point>
+ : public detail::point_order::clockwise {};
+
+template <typename Segment>
+struct point_order<segment_tag, Segment>
+ : public detail::point_order::clockwise {};
+
+
+template <typename Box>
+struct point_order<box_tag, Box>
+ : public detail::point_order::clockwise {};
+
+template <typename LineString>
+struct point_order<linestring_tag, LineString>
+ : public detail::point_order::clockwise {};
template <typename Ring>
Modified: sandbox/geometry/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp (original)
+++ sandbox/geometry/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
@@ -62,6 +62,7 @@
template
<
typename MultiGeometry,
+ bool Reverse,
typename SegmentIdentifier,
typename PointOut
>
@@ -69,6 +70,7 @@
<
multi_polygon_tag,
MultiGeometry,
+ Reverse,
SegmentIdentifier,
PointOut
>
@@ -80,6 +82,7 @@
detail::copy_segments::copy_segment_point_polygon
<
typename boost::range_value<MultiGeometry>::type,
+ Reverse,
SegmentIdentifier,
PointOut
>
Modified: sandbox/geometry/boost/geometry/multi/core/point_order.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/multi/core/point_order.hpp (original)
+++ sandbox/geometry/boost/geometry/multi/core/point_order.hpp 2010-12-20 16:25:21 EST (Mon, 20 Dec 2010)
@@ -23,6 +23,15 @@
namespace core_dispatch
{
+template <typename Multi>
+struct point_order<multi_point_tag, Multi>
+ : public detail::point_order::clockwise {};
+
+template <typename Multi>
+struct point_order<multi_linestring_tag, Multi>
+ : public detail::point_order::clockwise {};
+
+
// Specialization for multi_polygon: the order is the order of its polygons
template <typename MultiPolygon>
struct point_order<multi_polygon_tag, MultiPolygon>
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