自分の型を として登録する方法がわかりません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
です。
だから私は2つの質問があります:
- 正しいリングの向きを指定するにはどうすればよいですか?
- 上記で宣言されているように、リング タイプをポリゴンで使用できないのはなぜですか?