2017-03-17 3 views
0

私はboost::geometryに新規です。私はboost::segmentのポイントにアクセスするためにfor_each_pointを使用しようとしましたが、動作しません。私もsegment_viewを使ってアクセスしようとしましたが、ポイントの出力は変です。
boost:: segmentの各ポイントを繰り返し処理できるメカニズムはありますか?Q:boost :: segment内のポイントの座標にアクセスするにはどうすればよいですか?

namespace bg = boost::geometry; 

typedef bg::model::d2::point_xy<int> CleanPoint; 
typedef boost::geometry::model::segment<CleanPoint> CleanSegment; 
typedef boost::geometry::segment_view<CleanSegment> CleanSegmentView; 

BOOST_FOREACH(CleanSegment seg, frontier_cells_){ 
    CleanSegmentView view(seg); 

    //Iterating over the points of this segment 
    for (boost::range_iterator<CleanSegmentView const>::type it = boost::begin(view); 
        it != boost::end(view); ++it) 
    { 
     std::cout << " Point = " << boost::geometry::dsv(*it)<<'\n'; 
    } 
}  

答えて

0

座標にアクセスするための汎用的な方法は、get/set経由の無料機能さ:あなたはfirstsecond属性を経由してポイントにアクセスすることができるはずですので

pt = point{get<0, 0>(segment), get<0, 1>(segment)}; 
set<0, 0>(segment, get<0>(pt)); 
set<0, 1>(segment, get<1>(pt)); 

boost::model::segment<>std::pair<>から派生されます。

pt = segment.first; 

segment_viewでも問題はありますか?バグがある場合は、GitHubまたはBoost Tracに報告してください。


はい、現在(1.64ブースト)for_each_pointがセグメントのために実装されていないようです。おそらくそうだろう。


また、あなたが必要とする独自のタイプ有する部材を使用し、Boost.Geometryセグメントのコンセプトに適合させることができます:

関連する問題