Boost logo

Geometry :

Subject: [ggl] Difference / xor for multi polygons
From: Barend Gehrels (barend)
Date: 2011-02-27 05:48:32

Hi Javier,

On 27-2-2011 1:58, Javier Gonzalez wrote:
> Unfortunately now upon compilation of the same code (VS2010), even if
> I only leave the union inserterer, I get this:
> 1> BoostGeometry.cpp
> 1>Programming\C++
> Libraries\boost_1_46_0\boost/geometry/core/point_type.hpp(42): error
> C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1
> from 'boost::mpl::failed ************(__cdecl
> boost::geometry::traits::point_type<Geometry>::NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE::*
> ***********)(boost::mpl::assert_::types<T1>)' to
> 'boost::mpl::assert<false>::type'

I see. This is not caused by the change of yesterday, but by an earlier
(and correct) change.

The problematic lines are:
(...) typedef vector<polygon_2d> polygon_2d_list;
(...) static polygon_2d_list Combine(polygon_2d_list const& subjectPoly,
polygon_2d_list const& clipPoly, clip_type clipType)
(...) intersection_inserter<polygon_2d>(subjectPoly, clipPoly,

First a polygonlist is declared but it is not a multi-polygon. For
output, using it with the back_inserter, this is OK.

But for input, it should conform to the multi-polygon concept. A
vector<polygon> does conform to most of it, but it still needs the tag
to note the library "I'm a multi-polygon".

So in the last line it expects a multi-polygon and gets a vector of
polygons, and therefore the MPL assertion of point_type goes off.

That MPL assertion is relatively new, but I'm surprised that the code
earlier compiled because it needs to assure the multi-polygon concept on
several places.

So three solutions possible:
1) change typedef vector<polygon_2d> to multi_polygon<polygon_2d>
2) change Combine from poylgon_2d_list to polygon_2d (but I don't know
if that is what you want)
3) add a traits class to register your polygon_2d_list:

namespace boost { namespace geometry { namespace traits

template <> struct tag<polygon_2d_list>
     typedef multi_polygon_tag type;


> I'm using the version from
> Subversion repository with source code of *Boost Geometry* is hosted
> in the Boost Trunk available at
> svn co boost-geometry
> though I only got the geometry part and used it over the release
> version of boost 1.46

That should be no problem.

Regards, Barend

Barend Gehrels
-------------- next part --------------
An HTML attachment was scrubbed...

Geometry list run by mateusz at