2017-03-17 2 views
0

Ich bin neu in boost::geometry. Ich habe versucht, den for_each_point zu verwenden, um auf den Punkt in der boost::segment zuzugreifen, aber es funktioniert nicht. Ich habe auch versucht, die segment_view zu verwenden, um darauf zuzugreifen, aber die Ausgabe des Punktes ist komisch.
Gibt es einen Mechanismus, mit dem ich jeden Punkt in der boost:: segment durchlaufen kann?F: Wie kann ich auf die Koordinate des Punktes in einem boost :: Segment zugreifen?

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'; 
    } 
}  

Antwort

0

Die generische Art und Weise Koordinaten zuzugreifen, ist get/set freie Funktionen:

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<> von std::pair<> abgeleitet ist, so sollten Sie in der Lage sein, Punkte für den Zugriff über first und second Attribute:

pt = segment.first; 

segment_view sollte auch funktionieren, welche Probleme haben Sie damit? Wenn ein Fehler vorliegt, können Sie ihn unter GitHub oder Boost Trac melden.


Ja, so scheint es, dass derzeit (Boost 1,64) for_each_point nicht für Segmente implementiert ist. Es sollte wahrscheinlich.


Sie können auch Ihre eigene Art mit Mitgliedern verwenden Sie brauchen, und passen es an Boost.Geometry Segment Konzept:

Verwandte Themen