2017-03-17 100 views
0

我是boost::geometry的新用戶。我嘗試使用for_each_point訪問boost::segment中的點,但它不起作用。我也嘗試使用segment_view來訪問它,但點的輸出很奇怪。
是否有任何機制可以遍歷boost:: segment中的每個點?問:如何訪問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免費功能:

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<>派生,所以你應該能夠通過firstsecond屬性訪問點:

pt = segment.first; 

segment_view也應該工作,你有什麼問題呢?如果有錯誤,您可以在GitHubBoost Trac上報告。


是的,這似乎是目前(升壓1.64)for_each_point沒有爲段實施。它可能應該。


你也可以用你需要你自己有類型的成員,它適應Boost.Geometry段的概念: