Boost logo

Geometry :

Subject: Re: [geometry] Querying index using intersection with custom geometry
From: Michael Nett (netto.mihyaeru_at_[hidden])
Date: 2014-03-31 03:52:51


Hi Adam,

I've tried compiling your example code on Boost (version 1.48) and get the
following compiler errors (sorry for the wall of text). Regarding your
initial question, the objects we index in the R-Tree are pointers (of an
abstract base class).

Regards,
Michael

In file included from
/usr/local/include/boost/geometry/geometries/concepts/check.hpp:33:0,
                 from
/usr/local/include/boost/geometry/algorithms/append.hpp:24,
                 from
/usr/local/include/boost/geometry/algorithms/detail/assign_values.hpp:29,
                 from
/usr/local/include/boost/geometry/strategies/cartesian/cart_intersect.hpp:21,
                 from
/usr/local/include/boost/geometry/strategies/intersection.hpp:22,
                 from
/usr/local/include/boost/geometry/strategies/strategies.hpp:25,
                 from /usr/local/include/boost/geometry/geometry.hpp:35,
                 from /usr/local/include/boost/geometry/index/rtree.hpp:20,
                 from foo.cc:1:
/usr/local/include/boost/geometry/algorithms/not_implemented.hpp: In
instantiation of ‘boost::geometry::nyi::not_implemented_error<void, void,
void>’:
/usr/local/include/boost/geometry/algorithms/not_implemented.hpp:103:8:
instantiated from ‘boost::geometry::not_implemented<void, void, void>’
/usr/local/include/boost/geometry/geometries/concepts/check.hpp:66:8:
instantiated from ‘boost::geometry::dispatch::check<const MyFrustum, void,
true>’
/usr/local/include/boost/geometry/geometries/concepts/check.hpp:157:8:
instantiated from ‘boost::geometry::concept::detail::checker<const
MyFrustum>’
/usr/local/include/boost/geometry/geometries/concepts/check.hpp:180:31:
instantiated from ‘void boost::geometry::concept::check() [with Geometry =
const MyFrustum]’
/usr/local/include/boost/geometry/algorithms/intersects.hpp:97:5:
instantiated from ‘bool boost::geometry::intersects(const Geometry1&, const
Geometry2&) [with Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
instantiated from ‘static bool
boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
G1&, const G2&) [with G1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, G2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
instantiated from ‘static bool
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
boost::geometry::index::detail::intersects_tag,
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
instantiated from ‘static bool
boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
First, Last>::apply(const Predicate&, const Value&, const Indexable&) [with
Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Predicate =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
instantiated from ‘bool
boost::geometry::index::detail::predicates_check(const Predicates&, const
Value&, const Indexable&) [with Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Value = int,
Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >]’
/usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
  instantiated from ‘void
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates,
OutIter>::operator()(const internal_node&) [with Value =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Options =
boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
boost::geometry::index::detail::rtree::insert_reinsert_tag,
boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
boost::geometry::index::detail::rtree::split_default_tag,
boost::geometry::index::detail::rtree::rstar_tag,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Translator =
boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >, Box =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Allocators =
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, OutIter =
std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >,
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates, OutIter>::internal_node =
boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>]’
foo.cc:46:1: instantiated from here
/usr/local/include/boost/geometry/algorithms/not_implemented.hpp:64:5:
error: no matching function for call to
‘assertion_failed(mpl_::failed************
(boost::geometry::nyi::not_implemented_error<void, void,
void>::THIS_OPERATION_IS_NOT_OR_NOT_YET_IMPLEMENTED::************)(mpl_::assert_::types<void,
void, void, mpl_::na>))’
/usr/local/include/boost/geometry/algorithms/not_implemented.hpp:64:5:
note: candidate is:
/usr/local/include/boost/mpl/assert.hpp:82:5: note: template<bool C> int
mpl_::assertion_failed(typename mpl_::assert<C>::type)
In file included from
/usr/local/include/boost/geometry/core/reverse_dispatch.hpp:25:0,
                 from
/usr/local/include/boost/geometry/algorithms/distance.hpp:25,
                 from
/usr/local/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp:16,
                 from
/usr/local/include/boost/geometry/strategies/strategies.hpp:33,
                 from /usr/local/include/boost/geometry/geometry.hpp:35,
                 from /usr/local/include/boost/geometry/index/rtree.hpp:20,
                 from foo.cc:1:
/usr/local/include/boost/geometry/core/geometry_id.hpp: In instantiation of
‘boost::geometry::core_dispatch::geometry_id<void>’:
/usr/local/include/boost/geometry/core/geometry_id.hpp:87:8: instantiated
from ‘boost::geometry::geometry_id<MyFrustum>’
/usr/local/include/boost/geometry/core/reverse_dispatch.hpp:57:8:
instantiated from
‘boost::geometry::reverse_dispatch<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, MyFrustum>’
/usr/local/include/boost/geometry/algorithms/disjoint.hpp:344:80:
instantiated from ‘bool boost::geometry::disjoint(const Geometry1&, const
Geometry2&) [with Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’
/usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:
instantiated from ‘bool boost::geometry::intersects(const Geometry1&, const
Geometry2&) [with Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
instantiated from ‘static bool
boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
G1&, const G2&) [with G1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, G2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
instantiated from ‘static bool
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
boost::geometry::index::detail::intersects_tag,
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
instantiated from ‘static bool
boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
First, Last>::apply(const Predicate&, const Value&, const Indexable&) [with
Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Predicate =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
instantiated from ‘bool
boost::geometry::index::detail::predicates_check(const Predicates&, const
Value&, const Indexable&) [with Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Value = int,
Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >]’
/usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
  instantiated from ‘void
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates,
OutIter>::operator()(const internal_node&) [with Value =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Options =
boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
boost::geometry::index::detail::rtree::insert_reinsert_tag,
boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
boost::geometry::index::detail::rtree::split_default_tag,
boost::geometry::index::detail::rtree::rstar_tag,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Translator =
boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >, Box =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Allocators =
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, OutIter =
std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >,
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates, OutIter>::internal_node =
boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>]’
foo.cc:46:1: instantiated from here
/usr/local/include/boost/geometry/core/geometry_id.hpp:39:5: error: no
matching function for call to ‘assertion_failed(mpl_::failed************
(boost::geometry::core_dispatch::geometry_id<void>::NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE::************)(mpl_::assert_::types<void,
mpl_::na, mpl_::na, mpl_::na>))’
/usr/local/include/boost/geometry/core/geometry_id.hpp:39:5: note:
candidate is:
/usr/local/include/boost/mpl/assert.hpp:82:5: note: template<bool C> int
mpl_::assertion_failed(typename mpl_::assert<C>::type)
In file included from
/usr/local/include/boost/geometry/algorithms/distance.hpp:25:0,
                 from
/usr/local/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp:16,
                 from
/usr/local/include/boost/geometry/strategies/strategies.hpp:33,
                 from /usr/local/include/boost/geometry/geometry.hpp:35,
                 from /usr/local/include/boost/geometry/index/rtree.hpp:20,
                 from foo.cc:1:
/usr/local/include/boost/geometry/core/reverse_dispatch.hpp: In
instantiation of
‘boost::geometry::reverse_dispatch<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, MyFrustum>’:
/usr/local/include/boost/geometry/algorithms/disjoint.hpp:344:80:
instantiated from ‘bool boost::geometry::disjoint(const Geometry1&, const
Geometry2&) [with Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’
/usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:
instantiated from ‘bool boost::geometry::intersects(const Geometry1&, const
Geometry2&) [with Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
instantiated from ‘static bool
boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
G1&, const G2&) [with G1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, G2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
instantiated from ‘static bool
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
boost::geometry::index::detail::intersects_tag,
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
instantiated from ‘static bool
boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
First, Last>::apply(const Predicate&, const Value&, const Indexable&) [with
Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Predicate =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
instantiated from ‘bool
boost::geometry::index::detail::predicates_check(const Predicates&, const
Value&, const Indexable&) [with Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Value = int,
Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >]’
/usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
  instantiated from ‘void
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates,
OutIter>::operator()(const internal_node&) [with Value =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Options =
boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
boost::geometry::index::detail::rtree::insert_reinsert_tag,
boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
boost::geometry::index::detail::rtree::split_default_tag,
boost::geometry::index::detail::rtree::rstar_tag,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Translator =
boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >, Box =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Allocators =
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, OutIter =
std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >,
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates, OutIter>::internal_node =
boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>]’
foo.cc:46:1: instantiated from here
/usr/local/include/boost/geometry/core/reverse_dispatch.hpp:57:8: error: no
type named ‘type’ in ‘struct boost::geometry::geometry_id<MyFrustum>’
In file included from
/usr/local/include/boost/geometry/algorithms/num_points.hpp:26:0,
                 from
/usr/local/include/boost/geometry/algorithms/detail/throw_on_empty_input.hpp:15,
                 from
/usr/local/include/boost/geometry/algorithms/distance.hpp:29,
                 from
/usr/local/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp:16,
                 from
/usr/local/include/boost/geometry/strategies/strategies.hpp:33,
                 from /usr/local/include/boost/geometry/geometry.hpp:35,
                 from /usr/local/include/boost/geometry/index/rtree.hpp:20,
                 from foo.cc:1:
/usr/local/include/boost/geometry/algorithms/disjoint.hpp: In function
‘bool boost::geometry::disjoint(const Geometry1&, const Geometry2&) [with
Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’:
/usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:
instantiated from ‘bool boost::geometry::intersects(const Geometry1&, const
Geometry2&) [with Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
instantiated from ‘static bool
boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
G1&, const G2&) [with G1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, G2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
instantiated from ‘static bool
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
boost::geometry::index::detail::intersects_tag,
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
instantiated from ‘static bool
boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
First, Last>::apply(const Predicate&, const Value&, const Indexable&) [with
Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Predicate =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
instantiated from ‘bool
boost::geometry::index::detail::predicates_check(const Predicates&, const
Value&, const Indexable&) [with Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Value = int,
Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >]’
/usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
  instantiated from ‘void
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates,
OutIter>::operator()(const internal_node&) [with Value =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Options =
boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
boost::geometry::index::detail::rtree::insert_reinsert_tag,
boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
boost::geometry::index::detail::rtree::split_default_tag,
boost::geometry::index::detail::rtree::rstar_tag,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Translator =
boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >, Box =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Allocators =
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, OutIter =
std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >,
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates, OutIter>::internal_node =
boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>]’
foo.cc:46:1: instantiated from here
/usr/local/include/boost/geometry/algorithms/disjoint.hpp:344:80: error: no
type named ‘type’ in ‘struct
boost::geometry::reverse_dispatch<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, MyFrustum>’
In file included from
/usr/local/include/boost/geometry/core/coordinate_system.hpp:20:0,
                 from /usr/local/include/boost/geometry/core/cs.hpp:21,
                 from /usr/local/include/boost/geometry/geometry.hpp:19,
                 from /usr/local/include/boost/geometry/index/rtree.hpp:20,
                 from foo.cc:1:
/usr/local/include/boost/geometry/core/point_type.hpp: At global scope:
/usr/local/include/boost/geometry/core/point_type.hpp: In instantiation of
‘boost::geometry::traits::point_type<MyFrustum>’:
/usr/local/include/boost/geometry/core/point_type.hpp:66:17: instantiated
from ‘boost::geometry::core_dispatch::point_type<void, MyFrustum>’
/usr/local/include/boost/geometry/core/coordinate_dimension.hpp:58:8:
instantiated from ‘boost::geometry::core_dispatch::dimension<void,
MyFrustum>’
/usr/local/include/boost/geometry/core/coordinate_dimension.hpp:74:8:
instantiated from ‘boost::geometry::dimension<const MyFrustum>’
/usr/local/include/boost/geometry/core/coordinate_dimension.hpp:121:1:
instantiated from ‘void boost::geometry::assert_dimension_equal() [with G1
= const boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, G2 = const MyFrustum]’
/usr/local/include/boost/geometry/geometries/concepts/check.hpp:195:5:
instantiated from ‘void
boost::geometry::concept::check_concepts_and_equal_dimensions() [with
Geometry1 = const
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = const MyFrustum]’
/usr/local/include/boost/geometry/algorithms/disjoint.hpp:338:5: [
skipping 2 instantiation contexts ]
/usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
instantiated from ‘static bool
boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
G1&, const G2&) [with G1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, G2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
instantiated from ‘static bool
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
boost::geometry::index::detail::intersects_tag,
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
instantiated from ‘static bool
boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
First, Last>::apply(const Predicate&, const Value&, const Indexable&) [with
Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Predicate =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
instantiated from ‘bool
boost::geometry::index::detail::predicates_check(const Predicates&, const
Value&, const Indexable&) [with Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Value = int,
Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >]’
/usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
  instantiated from ‘void
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates,
OutIter>::operator()(const internal_node&) [with Value =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Options =
boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
boost::geometry::index::detail::rtree::insert_reinsert_tag,
boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
boost::geometry::index::detail::rtree::split_default_tag,
boost::geometry::index::detail::rtree::rstar_tag,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Translator =
boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >, Box =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Allocators =
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, OutIter =
std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >,
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates, OutIter>::internal_node =
boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>]’
foo.cc:46:1: instantiated from here
/usr/local/include/boost/geometry/core/point_type.hpp:45:5: error: no
matching function for call to ‘assertion_failed(mpl_::failed************
(boost::geometry::traits::point_type<MyFrustum>::NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE::************)(mpl_::assert_::types<MyFrustum,
mpl_::na, mpl_::na, mpl_::na>))’
/usr/local/include/boost/geometry/core/point_type.hpp:45:5: note: candidate
is:
/usr/local/include/boost/mpl/assert.hpp:82:5: note: template<bool C> int
mpl_::assertion_failed(typename mpl_::assert<C>::type)
/usr/local/include/boost/geometry/core/point_type.hpp: In instantiation of
‘boost::geometry::core_dispatch::point_type<void, MyFrustum>’:
/usr/local/include/boost/geometry/core/coordinate_dimension.hpp:58:8:
instantiated from ‘boost::geometry::core_dispatch::dimension<void,
MyFrustum>’
/usr/local/include/boost/geometry/core/coordinate_dimension.hpp:74:8:
instantiated from ‘boost::geometry::dimension<const MyFrustum>’
/usr/local/include/boost/geometry/core/coordinate_dimension.hpp:121:1:
instantiated from ‘void boost::geometry::assert_dimension_equal() [with G1
= const boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, G2 = const MyFrustum]’
/usr/local/include/boost/geometry/geometries/concepts/check.hpp:195:5:
instantiated from ‘void
boost::geometry::concept::check_concepts_and_equal_dimensions() [with
Geometry1 = const
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = const MyFrustum]’
/usr/local/include/boost/geometry/algorithms/disjoint.hpp:338:5:
instantiated from ‘bool boost::geometry::disjoint(const Geometry1&, const
Geometry2&) [with Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’
/usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:
instantiated from ‘bool boost::geometry::intersects(const Geometry1&, const
Geometry2&) [with Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
instantiated from ‘static bool
boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
G1&, const G2&) [with G1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, G2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
instantiated from ‘static bool
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
boost::geometry::index::detail::intersects_tag,
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
instantiated from ‘static bool
boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
First, Last>::apply(const Predicate&, const Value&, const Indexable&) [with
Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Predicate =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
instantiated from ‘bool
boost::geometry::index::detail::predicates_check(const Predicates&, const
Value&, const Indexable&) [with Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Value = int,
Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >]’
/usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
  instantiated from ‘void
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates,
OutIter>::operator()(const internal_node&) [with Value =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Options =
boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
boost::geometry::index::detail::rtree::insert_reinsert_tag,
boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
boost::geometry::index::detail::rtree::split_default_tag,
boost::geometry::index::detail::rtree::rstar_tag,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Translator =
boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >, Box =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Allocators =
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, OutIter =
std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >,
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates, OutIter>::internal_node =
boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>]’
foo.cc:46:1: instantiated from here
/usr/local/include/boost/geometry/core/point_type.hpp:66:17: error: no type
named ‘type’ in ‘struct boost::geometry::traits::point_type<MyFrustum>’
In file included from
/usr/local/include/boost/geometry/geometries/concepts/point_concept.hpp:22:0,
                 from
/usr/local/include/boost/geometry/arithmetic/arithmetic.hpp:23,
                 from /usr/local/include/boost/geometry/geometry.hpp:32,
                 from /usr/local/include/boost/geometry/index/rtree.hpp:20,
                 from foo.cc:1:
/usr/local/include/boost/geometry/core/coordinate_dimension.hpp: In
function ‘void boost::geometry::assert_dimension_equal() [with G1 = const
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, G2 = const MyFrustum]’:
/usr/local/include/boost/geometry/geometries/concepts/check.hpp:195:5:
instantiated from ‘void
boost::geometry::concept::check_concepts_and_equal_dimensions() [with
Geometry1 = const
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = const MyFrustum]’
/usr/local/include/boost/geometry/algorithms/disjoint.hpp:338:5:
instantiated from ‘bool boost::geometry::disjoint(const Geometry1&, const
Geometry2&) [with Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’
/usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:
instantiated from ‘bool boost::geometry::intersects(const Geometry1&, const
Geometry2&) [with Geometry1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
instantiated from ‘static bool
boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
G1&, const G2&) [with G1 =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, G2 = MyFrustum]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
instantiated from ‘static bool
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
boost::geometry::index::detail::intersects_tag,
boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
instantiated from ‘static bool
boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
First, Last>::apply(const Predicate&, const Value&, const Indexable&) [with
Value = int, Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Predicate =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u]’
/usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
instantiated from ‘bool
boost::geometry::index::detail::predicates_check(const Predicates&, const
Value&, const Indexable&) [with Tag =
boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
unsigned int Last = 1u, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, Value = int,
Indexable =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >]’
/usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
  instantiated from ‘void
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates,
OutIter>::operator()(const internal_node&) [with Value =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Options =
boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
boost::geometry::index::detail::rtree::insert_reinsert_tag,
boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
boost::geometry::index::detail::rtree::split_default_tag,
boost::geometry::index::detail::rtree::rstar_tag,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Translator =
boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >, Box =
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, Allocators =
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>, Predicates =
boost::geometry::index::detail::spatial_predicate<MyFrustum,
boost::geometry::index::detail::intersects_tag, false>, OutIter =
std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > > >,
boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
Options, Translator, Box, Allocators, Predicates, OutIter>::internal_node =
boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
2ul, boost::geometry::cs::cartesian> > >,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
boost::geometry::cs::cartesian> >,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
boost::geometry::index::detail::rtree::node_d_mem_static_tag>]’
foo.cc:46:1: instantiated from here
/usr/local/include/boost/geometry/core/coordinate_dimension.hpp:121:1:
error: no type named ‘type’ in ‘struct boost::geometry::dimension<const
MyFrustum>’

On Fri, Mar 28, 2014 at 10:00 PM, Adam Wulkiewicz <adam.wulkiewicz_at_[hidden]
> wrote:

> Hi Michael,
>
> Michael Nett wrote:
>
> Hello,
>
> We're considering using Boost.Geometry in one of our projects, but we
> require the ability to query an index using a super set of the geometric
> shapes provided by the library (frustum, conical frustums and complex
> geometry).
>
> We have tried implementing template specializations as discussed in this
> thread (
> http://stackoverflow.com/questions/19490435/boost-geometry-spatial-query-shapes
> ).
>
> namespace boost { namespace geometry {
> template <typename Box> inline
> bool intersects(Box const& b, MyFrustum const& f)
> {
> // your implementation
> }
> }}
>
> However, compiling this provides the following error.
>
> /usr/include/boost/geometry/core/point_type.hpp:45:5: error: no matching
> function for call to 'assertion_failed(mpl_::failed************
> (boost::geometry::traits::point_type<MyGeometry>::NOT_IMPLEMENTED_FOR_THIS_POIN‌
> ​T_TYPE::************)(mpl_::assert_::types<MyGeometry, mpl_::na, mpl_::na,
> mpl_::na>))'
>
> I tried digging into the source files, but my understanding of the
> geometry library is too limited to figure out what's going on.
>
> Can anyone advise on how to approach the problem?
>
>
> This assertion fails if you try to get a point_type for the type which is
> not adapted to any of the Boost.Geometry concepts. So you must call
> something like geometry::point_type<MyGeometry>::type or pass an object of
> MyGeometry to one of the existing functions of Boost.Geometry which tries
> to use is as a properly adapted Geometry.
>
> Did you check if your implementation of intersects() work without the
> rtree?
>
> Btw, what's the Value type stored in the rtree?
>
> Below is the fully working (for me) example, maybe it will help you to
> find the cause:
>
> #include <boost/geometry/index/rtree.hpp>
>
> struct MyFrustum
> {
> MyFrustum(int d) : dummy(d) {}
> int dummy;
> };
>
> namespace boost { namespace geometry {
>
> // This will be called for Nodes Bounds and Indexables!
>
> template <typename Box> inline
> bool intersects(Box const& b, MyFrustum const& f)
> {
> std::cout << "checking the intersection with " << f.dummy << std::endl;
> return true; // always intersects
> }
>
> }}
>
> int main()
> {
> namespace bg = boost::geometry;
> namespace bgi = bg::index;
> namespace bgm = bg::model;
> typedef bgm::point<float, 2, bg::cs::cartesian> pt;
> typedef bgm::box<pt> box;
>
> // check your implementation
> bool ok = bg::intersects(box(pt(0, 0), pt(1, 1)), MyFrustum(5));
>
> std::cout << "-------------------" << std::endl;
>
> // now use the rtree
> bgi::rtree<box, bgi::rstar<8> > rt;
> // insert some values
> rt.insert(box(pt(0, 0), pt(1, 1)));
> rt.insert(box(pt(2, 2), pt(3, 3)));
>
> // performa a query
> std::vector<box> vec;
> rt.query(bgi::intersects(MyFrustum(10)), std::back_inserter(vec));
>
> std::cout << vec.size() << std::endl;
> }
>
> The above should print:
>
> checking the intersection with 5
> -------------------
> checking the intersection with 10
> checking the intersection with 10
> 2
>
> Let me know if it helps.
>
> Regards,
> Adam
>
> _______________________________________________
> Geometry mailing list
> Geometry_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/geometry
>
>



Geometry list run by mateusz at loskot.net