我很难理解如何将我自己的类型注册为boost::geometry::model::ring
. 我有自己的点课:
struct Point { double x, y; };
并且环存储为std::vector<Point>
. 因此,我这样注册它们:
BOOST_GEOMETRY_REGISTER_POINT_2D(Point , double, cs::cartesian, x, y);
BOOST_GEOMETRY_REGISTER_RING(std::vector<Point>);
现在我想纠正一个环的方向,事实上,以下编译:
void foo(std::vector<Point>& ring) {
boost::geometry::correct(ring);
}
麻烦的是,如何定义环的“正确”方向?使用时更明显boost::geometry::model::polygon
,模板参数允许我指定预期的方向。但是,以下内容无法编译:
void foo(std::vector<Point>& ring) {
typedef boost::geometry::model::polygon<vector> clockwise_closed_polygon;
clockwise_closed_polygon cwcp;
boost::geometry::exterior_ring(cwcp) = ring; //<<< fails to compile
boost::geometry::correct(cwcp);
}
显然,我自己的环类型无法转换为clockwise_closed_polygon
.
所以我有两个问题:
- 如何指定正确的环方向?
- 如上所述,为什么我的环类型不能与多边形一起使用?