2015-11-24 1 views
0

Bien qu'il existe une documentation relative à la fonction libre zone du module Arrangement_2, elle n'est mentionnée dans aucun fichier d'exemple et son utilisation n'est pas évidente.Comment utiliser la zone CGAL Arrangement_2?

En supposant que j'ai un arrangement de points et segments de ligne basé sur CGAL::Arr_linear_traits_2, je veux imprimer tous les visages visités en marchant le long d'un Segment_2 donné. Comment puis je faire ça?

Répondre

0

Vous devez utiliser la fonction "assigner":

void segment_intersect(Arrangement_2 &arr, Segment_2 &c) 
{ 
    std::vector<CGAL::Object> zone_elems; 
    Arrangement_2::Face_handle face; 
    CGAL::zone(arr, c, std::back_inserter(zone_elems)); 
    for (int i = 0; i < (int)zone_elems.size(); ++i) 
    { 
     if (assign(face, zone_elems[i])) 
     //print the face index... 
    } 
} 
0

L'utilisation est en fait assez évidente. Pour obtenir tous les éléments recoupés, ce code est assez:

void segment_intersect(Arrangement_2 &arr, Segment_2 &c) 
{ 
    std::vector<CGAL::Object> zone_elems; 
    CGAL::zone(arr, c, std::back_inserter(zone_elems)); 
} 

Je n'ai pas encore savoir comment extraire les visages hors du vecteur.