2017-02-16 6 views
1

Хотя я не знаю, как писать C++ Я пытаюсь использовать CGAL для того, чтобы пытаться построить фигуры из облаков точек LiDAR, используя Point Set Shape Detection. Используя примеры, я могу читать точки и нормали из файла, после чего CGAL обнаруживает фигуры. Программа настроена на обнаружение только плоских фигур.Точечная установка Форма обнаружения: сохранение планарных фигур в файл

Я хотел бы сохранить плоские фигуры в файл, чтобы я мог использовать их в другом программном обеспечении. Но я не смог найти примеры того, как это можно достичь. Используемая тестовая программа основана на коде efficient_RANSAC_parameters.cpp. Он имеет часть, когда он выполняет итерацию по всем обнаруженным формам. Можно ли добавить что-то там, чтобы записать плоские фигуры в файл? Я вижу, что формат ВЫКЛ является популярным и простым способом (в CGAL) для сохранения полигонов в файл, что может быть хорошим файлом формата кандидата.

+0

OFF используется для представления сеток, здесь вы хотите сохранить самолеты, чтобы использовать их в другом программном обеспечении. Формат накладывается тем, что другое программное обеспечение может читать. – sloriot

+0

Я заметил, что есть достаточная поддержка OFF в другом программном обеспечении. Но любой другой не двоичный формат был бы в порядке, поскольку я мог бы использовать текстовую обработку для получения других форматов. Я просто хотел бы иметь файл, с которым я могу работать. Любой способ записи координат формы в текстовый файл по строкам будет работать для меня. –

ответ

0

В example в руководстве вы можете увидеть, что когда у вас есть объект Плоскость формы if(Plane* plane = dynamic_cast<Plane*>(it->get())){..} вы можете получить из формы плоского объекта в CGAL::Plane_3, из которого вы можете получить точку и нормальный, или коэффициенты самолет.

+0

Спасибо, но моя проблема в том, что я не знал, как написать свойства плоскости в файл. Но я нашел помощь, см. Мой ответ ниже. –

1

Коллега, который умеет писать C++, помог мне с этой проблемой. Он придумал следующее:

while (it != shapes.end()) { 
    if (Plane* plane = dynamic_cast<Plane*>(it->get())) 
    { 
    std::cout << "PLANE_" << count++ << "[" << std::endl; 
    const std::vector<size_t> indices = it->get()->indices_of_assigned_points(); 
    std::vector<size_t>::const_iterator iti = indices.begin(); 
    while (iti != indices.end()) { 
     // Retrieves point 
     Point_with_normal pw = *(points.begin() + (*iti)); 
     Kernel::Point_3 p = pw.first; 
     std::cout << "POINT[" << p.x() << "," << p.y() << "," << p.z() << "]" << std::endl; 
     // Proceeds with next point. 
     iti++; 
    } 
    std::cout << "]" << std::endl; 
    } 
    // Proceeds with next detected shape. 
    it++; 
} 

Этот блок может заменить петлю в примере efficient_RANSAC_parameters.cpp. Выходной сигнал выглядит так:

PLANE_0[ 
POINT[34.96,584.49,0.47] 
POINT[34.97,585.24,0.54] 
POINT[34.88,584.51,0.49] 
POINT[34.98,584.75,0.49] 
] 

Это дает мне возможность работать. В моем случае я использую sed для преобразования этого вывода в SQL-запросы, которые позволяют мне передавать данные в реляционную базу данных для дальнейшей обработки.

 Смежные вопросы

  • Нет связанных вопросов^_^