Как я выполняю итерации по поверхностям в CGAL

Я пытаюсь использовать CGAL, чтобы сделать некоторую Триангуляцию Делоне. Я использовал один из образцов CGAL для вычислений триангуляции, которая включает полевой атрибут высоты.

Проблема у меня есть наличие, состоит в том, что я понятия не имею, как получить получающуюся триангуляцию. Я выяснил, как получить face_iterator, но я не знаю, что сделать оттуда. То, что я надеюсь получить, является индексом в массив точки для каждой из 3 точек на каждом треугольнике.

Я испытываю затруднения при прохождении через все вложенные шаблоны:

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Triangulation_euclidean_traits_xy_3.h>
#include <CGAL/Delaunay_triangulation_2.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Triangulation_euclidean_traits_xy_3<K> Gt;
typedef CGAL::Delaunay_triangulation_2<Gt> Delaunay;
typedef K::Point_3 Point;

int main()
{
    //initialize the points with some trivial data
    std::vector<Point> pts;
    pts.push_back(Point(1., 2., 3.));
    pts.push_back(Point(2., 2., 3.));
    pts.push_back(Point(1., 3., 3.));
    pts.push_back(Point(4., 2., 3.));    

    //create a delaunay triangulation
    Delaunay dt;
    dt.insert(pts.begin(), pts.end());

    //iterate through the faces
    Delaunay::Finite_faces_iterator it;
    for (it = dt.finite_faces_begin(); it != dt.finite_faces_end(); it++)
    {
        //What do I do here??
    }

    return 0;
}
15
задан gsamaras 12 May 2016 в 20:14
поделиться

2 ответа

, Если вы хотите действительно расширенный пример того, как сделать точно, что вы хотите, смотрите на источник к инструментам пейзажа X-плоскости отсюда: http://scenery.x-plane.com/code.php

расширенным примером, я имею в виду несколько сотен тысяч строк, но существует использование почти всего, что CGAL может сделать с Триангуляциями Делоне и расширенными атрибутами там.

0
ответ дан 1 December 2019 в 04:17
поделиться

Вот пример из Google. Введен Finite_faces_iterator.

  Interval_skip_list isl;
  for(Finite_faces_iterator fh = dt.finite_faces_begin();
      fh != dt.finite_faces_end();
      ++fh){
    isl.insert(Interval(fh));
  }
  std::list<Interval> level;
  isl.find_intervals(50, std::back_inserter(level));
  for(std::list<Interval>::iterator it = level.begin();
      it != level.end();
      ++it){
    std::cout << dt.triangle(it->face_handle()) << std::endl;
  }

Это не делает то, что вы хотите, но дает пример того, что можно сделать с итератором.

1
ответ дан 1 December 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: