Как скопировать поверхностную сетку в CGAL

#mesh #cgal

#сетка #cgal

Вопрос:

Я хочу скопировать сетку с помощью функции copy_face_graph(source, target) . Но целевая сетка отличается (она имеет одинаковое количество вершин и граней, но координаты и порядок совершенно разные).

Код:

 #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Surface_mesh.h>
#include <iostream>
#include <fstream>
#include <CGAL/boost/graph/copy_face_graph.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel   Kernel;
typedef CGAL::Surface_mesh<Kernel::Point_3>                   Mesh;
namespace PMP = CGAL::Polygon_mesh_processing;

int main(int argc, char* argv[]) {
    const char* filename1 = (argc > 1) ? argv[1] : "data/blobby.off";
    std::cout << ".off loaded" << std::endl;
    std::ifstream input(filename1);
    Mesh mesh_orig;
    if (!input || !(input >> mesh_orig))
    {
        std::cerr << "First mesh is not a valid off file." << std::endl;
        return 1;
    }
    input.close();

    // ========================================================
    Mesh mesh_copy;
    CGAL::copy_face_graph(mesh_orig, mesh_copy);
    
    // ========================================================

    std::ofstream mesh_cpy("CPY_ANYLYZE/mesh_copy.off");
    mesh_cpy << mesh_copy;
    mesh_cpy.close();


    return 0;
}
  

Кто-нибудь знает, как получить полную такую же сетку из исходной сетки? Нужно ли мне добавить именованные параметры или, может быть, использовать другую функцию?

Большое спасибо

Ответ №1:

За исключением случаев, когда вы собираетесь написать некоторый код, работающий с различными структурами данных, вы можете использовать конструктор копирования из Surface_mesh класса, Mesh mesh_copy(mesh_orig) . copy_face_graph не выполняет необработанную копию, потому что она работает также, если ввод и вывод имеют разные типы. Однако выходные данные должны быть одинаковыми с точностью до порядка симплексов.