#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
не выполняет необработанную копию, потому что она работает также, если ввод и вывод имеют разные типы. Однако выходные данные должны быть одинаковыми с точностью до порядка симплексов.