天道酬勤,学无止境

cgal

How to get the vertices and the faces of a polygon mesh with CGAL?

With CGAL, I'm able to get a polyhedron mesh in OFF format. For example the program below builds two tetrahedra, computes their intersection, and returns the result in an OFF file. The OFF output provides the vertices coordinates and the faces given by the vertices indices. But I would like to get the vertices and the faces as C++ variables (for example double vectors for the vertices and int vectors for the faces). Is it possible, and how? Of course I could extract what I want from the OFF file but there's probably a better way. #include <CGAL/Exact_predicates_exact_constructions_kernel.h>

2021-09-24 03:24:45    分类:问答    c++   computational-geometry   cgal

表面参数化(Surface parametrization)

问题 我正在尝试在表面网格(从 STL 格式文件中读取)上获取参数化表面。 我阅读了 CGAL 示例目录提供的一些有关参数化的示例。 我知道应该提供接缝线以便在任意表面上获得参数化表面。 但我仍然不明白如何制作接缝线。 以下是我到目前为止的代码。 总之,我想知道的是, 1)当使用CGAL::Parameterization_mesh_feature_extractor时,如何获取特征曲线上的顶点并与顶点形成接缝线? 2) CGAL 是否提供了一种方法来获得给定曲面和切割平面的相交曲线,以便我可以在给定曲面的一部分上获得参数化曲面? #include <cstdio> #include <ctime> #include <iostream> #include <iomanip> #include <algorithm> #include <fstream> #include <CGAL/IO/io.h> #include <CGAL/IO/STL_reader.h> #include <CGAL/Polyhedron_3.h> #include <CGAL/Simple_cartesian.h> #include <CGAL/polygon_soup_to_polyhedron_3.h> #include <CGAL/Parameterization_polyhedron

2021-09-23 20:32:10    分类:技术分享    c++   cgal

在 CGAL 正则三角剖分中插入带信息的加权点(Insertion of weighted point with info in CGAL regular triangulation)

问题 我正面临一个我希望其他人以前遇到过的问题,因为我找不到出路! 我在 CGAL 中有一个常规三角剖分,我希望在其中插入一些带有 info std::pair<myweightpoint, myinfo>加权点,并在插入后获取顶点( Vertex_handle )的句柄! 问题是没有这样的功能。 它存在几个插入函数: Vertex_handle Regular_triangulation::insert ( const Weighted_point & p ) ; 这将返回一个Vertex_handle ,它很酷,但不带 INFO 的加权点,这对我和我对这些顶点的处理非常重要。 std::ptrdiff_t Regular_triangulation::insert ( WeightedPointWithInfoInputIterator first, WeightedPointWithInfoInputIterator last ) ; 这允许我插入一些带有信息的加权点(这很好),但没有给我插入顶点的句柄。 此外,由于我一次插入一个点,现在我正在做这样的事情: v_wpoints.resize(1) ; v_wpoints[0] = std::make_pair(myweightpoint, myinfo) ; rt.insert(v_wpoints.begin(), v

2021-09-20 06:34:03    分类:技术分享    c++   insert   triangulation   cgal   weighted

在 CGAL 正则三角剖分中插入带信息的加权点(Insertion of weighted point with info in CGAL regular triangulation)

问题 我正面临一个我希望其他人以前遇到过的问题,因为我找不到出路! 我在 CGAL 中有一个常规三角剖分,我希望在其中插入一些带有 info std::pair<myweightpoint, myinfo>加权点,并在插入后获取顶点( Vertex_handle )的句柄! 问题是没有这样的功能。 它存在几个插入函数: Vertex_handle Regular_triangulation::insert ( const Weighted_point & p ) ; 这将返回一个Vertex_handle ,它很酷,但不带 INFO 的加权点,这对我和我对这些顶点的处理非常重要。 std::ptrdiff_t Regular_triangulation::insert ( WeightedPointWithInfoInputIterator first, WeightedPointWithInfoInputIterator last ) ; 这允许我插入一些带有信息的加权点(这很好),但没有给我插入顶点的句柄。 此外,由于我一次插入一个点,现在我正在做这样的事情: v_wpoints.resize(1) ; v_wpoints[0] = std::make_pair(myweightpoint, myinfo) ; rt.insert(v_wpoints.begin(), v

2021-09-20 06:31:41    分类:技术分享    c++   insert   triangulation   cgal   weighted

使用#CGAL 的 3D 网格三角形的角度(Angles of triangles of a 3D mesh using #CGAL)

问题 我想知道是否可以使用 CGAL 的函数计算 3D 网格(用图形表示)的三角形的角度? 谢谢 回答1 如果您有一个包含三个点a 、 b和c的非退化三角形,三角形的角度, a处角度的余弦是两个向量除以它们的长度的标量积: CGAL::Vector_3<K> v1 = b - a; CGAL::Vector_3<K> v2 = c - a; double cosine = v1 * v2 / CGAL::sqrt(v1*v1) / CGAL::sqrt(v2 * v2); 其中K是您用于点的内核类型。 半径中的角度本身可以通过以下方式计算: double angle = std::acos(cosine); 当然,对于退化三角形,长度可以为零,上面的表达式将计算0./0. (这是一个非数字)。 你必须分开处理那个案子。

2021-09-19 19:30:20    分类:技术分享    mesh   cgal

libCGAL-vc120-mt-sgd-4.5.1.lib 链接错误,似乎无法找到或构建它(Link error with libCGAL-vc120-mt-sgd-4.5.1.lib and cant seem to find or build it)

问题 嘿,当谈到 CGAL 和 CMake 时,我有点菜鸟,但我已经到了一切似乎都在运行的地步,除了这个链接错误: 链接:致命错误 LNK1104:无法打开文件“libCGAL-vc120-mt-sgd-4.5.1.lib” 问题是我似乎无法在我构建错误的任何地方找到对这个库的引用? 我可以在我的 cgal lib 目录中看到一个“libCGAL-vc120-mt-gd-4.5.1.lib”,它链接正常。 我不确定 gd 和 sgd 之间的区别是什么以及如何制作它。 任何帮助表示赞赏。 回答1 命名libCGAL-vc120-mt-sgd-4.5.1.lib表明您正在编译一个使用 CGAL 的程序,使用链接器标志/MTd (调试,并静态链接 C++ 运行时)。 CGAL 的 CMake 脚本不支持与静态运行时链接。 他们只支持/MD或/MDd 。 我建议您在设置中更改该链接器标志。 或者,您可以尝试更改 CGAL 的 CMake 脚本,但我不推荐该解决方案。

2021-09-17 18:34:52    分类:技术分享    c++   cmake   cgal

使用 3D Delaunay 三角剖分作为基础表示 LiDAR 表面?(Representing a LiDAR surface using the 3D Delaunay Triangulation as basis?)

问题 我想用 3D Delaunay 三角剖分来表示一个表面。 顶点必须是我的原始输入数据,来自市区的 LiDAR 点云。 因此,表面必须调整/适应输入信息。 实际上,我需要做的是以下内容: 我有一个来自市区的 3D 点云 (x, y, z); 我需要代表这个区域的表面; 我想做一个 3D delaunay 三角剖分(我用 CGAL 做了,我得到了四面体)并只识别代表表面的三角形(使用 CGAL 我有 4 个顶点,我无法定义哪些顶点代表表面三角形); 由于这些表面三角形是已知的,我需要给出一个点并得到包含这个给定点的三角形。 我想知道我需要哪个功能。 我看到了“3D 表面网格生成”、“3D Delaunay 三角剖分”、“点集的表面重建”、“3D 网格生成”和“3D Alpha 形状”。 但我不确定哪一个更适合我的工作/需要。 什么函数可以给我表面三角形(由我的初始数据集中的点表示)作为输出。 有人有建议吗? 回答1 您可以使用 Fade 2.5D,它使用三角形来网格化曲面点: http://www.geom.at/fade2d/html/ 该库可免费用于科学用途,您可以在 Example7 中找到代码示例(我是作者)。

2021-09-17 10:31:57    分类:技术分享    3d   cgal   delaunay   lidar

clang 的 c++11 支持可靠吗?(Is clang's c++11 support reliable?)

问题 我在尝试混合 clang(Apple LLVM 版本 6.0 (clang-600.0.56)(基于 LLVM 3.5svn,目标:x86_64-apple-darwin14.0.0)、c++11 和 CGAL(通过 MacPorts)时遇到了一个有趣的问题)。 似乎我是否调用std::vector<>::reserve将决定我的程序是否会编译。 我已将问题缩减为一个最小的示例(与 CGAL 示例一样最小): #include <vector> #include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/AABB_tree.h> #include <CGAL/AABB_traits.h> #include <CGAL/AABB_triangle_primitive.h> // CGAL::Epeck works fine, suggesting the problem is in CGAL::Epick typedef CGAL::Epick Kernel; typedef CGAL::Triangle_3<Kernel> Triangle_3; typedef typename std::vector<Triangle_3>::iterator Iterator

2021-09-17 05:00:15    分类:技术分享    c++   c++11   compiler-errors   cgal   clang++

C++ 一起使用两个不兼容的库,有哪些选择?(C++ using two incompatible libraries together, what are the options?)

问题 我使用点云库(PCL)编写了一个程序。 现在我想使用一些cgal的算法。 我已经设法独立地构建了一个 cgal 类(所有依赖项都在工作等)但是当我尝试组合这两个项目时,我得到了未解决的外部符号错误 那么,构建 cgal 项目并从我的 PCL 项目(以某种方式)访问它的选项有哪些? 我将向 cgal 项目传递一个简单的向量,因此理论上没有任何专业库必须相互交互。 我已经尝试将它构建到一个静态和动态库中,但据我所知,当我这样做时,我仍然需要包含所有 cgal 依赖项——这再次破坏了事情。 有关未解析的外部对象的更多信息: 我使用这个 CGAL 示例制作了一个简单的项目 (VS2010),使用 CMAKE 添加所需的依赖项:CGAL 组件(包括 QT)、TAUCS、LAPACK、BLAS。 项目建设愉快。 如果我添加对 PCL 库的引用: include_directories (${PCL_INCLUDE_DIRS}) link_directories (${PCL_LIBRARY_DIRS} ) add_definitions (${PCL_DEFINITIONS}) 现在,当我尝试构建时,我得到了四个未解析的外部变量: poisson.obj : error LNK2019: unresolved external symbol "__declspec(dllimport)

2021-09-14 14:39:47    分类:技术分享    c++   dependencies   libraries   point-cloud-library   cgal

CGAL:二维约束 Delaunay 三角剖分 - 向约束添加信息(CGAL: 2D Constrained Delaunay Triangulation - Adding information to constraints)

问题 可以将信息(如整数)附加到点,然后再将它们添加到三角仪对象。 我这样做是因为我一方面需要一个 int 标志,我稍后使用它来定义我的纹理坐标,另一方面我需要一个索引,以便我可以创建一个索引的 VBO。 http://doc.cgal.org/latest/Triangulation_2/Triangulation_2_2info_insert_with_pair_iterator_2_8cpp-example.html 但是我只想插入约束边缘而不是点。 如果我插入两个 CGAL 会返回奇怪的结果,因为点已被输入两次(一次作为点,一次作为受约束边缘的点)。 http://doc.cgal.org/latest/Triangulation_2/Triangulation_2_2constrained_8cpp-example.html 是否可以以与点信息相同的方式连接到“约束”,以便我只能使用此函数cdt.insert_constraint( Point(j,0), Point(j,6)); 在我迭代结果面之前? 后来当我遍历三角形时,我需要某种方式来访问我之前定义的 int 标志。 像这样,但不是在顶点上,而是在由约束边缘定义的线段的“末端”上: for(CDT::Finite_faces_iterator fit = m_cdt.finite_faces_begin()

2021-09-13 06:53:55    分类:技术分享    constraints   triangulation   cgal   delaunay