• 【软件安装】ubuntu+CGAL+QT可视化+draw_triangulation_2+draw_triangulation_3


    CGAL下载:

    Release CGAL-5.5 · CGAL/cgal · GitHub

    CGAL-5.5-examples.zip

    Source code (tar.gz) 

    不需要编译,解压到合适位置即可。

    CGAL-5.5-examples是官方给出的测试例子,附带测试数据。

    1. CGAL 开源项目很高兴地宣布 CGAL 5.5 版,即计算几何算法库。
    2. 除了对现有软件包的修复和一般增强之外,自 CGAL 5.4 以来,以下内容发生了变化:
    3. 3D Alpha Wrapping(新包装)
    4. 该组件将 3D 三角形网格、汤或点集作为输入,并生成包含输入的有效(水密、无交叉和组合 2 流形)表面三角形网格。
    5. This component takes a 3D triangle mesh, soup, or point set as input, and generates a valid (watertight, intersection-free, and combinatorially 2-manifold) surface triangle mesh that contains the input.
    6. 该算法从输入的松散边界框开始,通过收缩包装和细化 3D Delaunay 三角剖分继续进行。
    7. The algorithm proceeds by shrink-wrapping and refining a 3D Delaunay triangulation, starting from a loose bounding box of the input.
    8. 两个用户定义的参数(alpha和offset)分别控制收缩包装过程可以进入的腔的最大尺寸,以及最终曲面网格对输入的紧密度。一旦组合起来,这些参数就提供了一种方法,以权衡输入的保真度和输出的复杂性。
    9. Two user-defined parameters, alpha and offset, offer control over the maximum size of cavities where the shrink-wrapping process can enter, and the tightness of the final surface mesh to the input, respectively. Once combined, these parameters provide a means to trade fidelity to the input for complexity of the output.
    10. 另见公告页面。
    11. 2D 直骨架和多边形偏移(重大更改)
    12. 修复函数 CGAL::create_exterior_skeleton_and_offset_polygons_with_holes_2() 的输出
    13. 不考虑外框的偏移量。
    14. 修复了未计算孔偏移的带孔多边形外部偏移的计算
    15. 3D 凸壳
    16. 添加了函数 CGAL::convex_hull_3() 的重载,它将结果写入索引三角形集。
    17. 二维多边形
    18. 添加顶点、边和孔范围。
    19. GeneralPolygonWithHoles_2 概念现在需要嵌套类型 Polygon_2 而不是 General_polygon_2
    20. 2D 正则化布尔集操作
    21. 概念 GeneralPolygonSetTraits_2 现在需要嵌套类型 Construct_polygon_with_holes_2 而不是 Construct_general_polygon_with_holes_2
    22. 组合图
    23. 删除了 CGAL 4.94.10 中不推荐使用的旧代码(全局函数和与飞镖相关的信息)。
    24. 二维排列
    25. 修复了特征类模板 Arr_geodesic_arc_on_sphere_traits_2 的 intersect_2、compare_y_at_x_right 和 compare_y_at_x_left 函数对象,用于处理球体上的测地线弧,并对追踪特征应用了一个小的语法修复。
    26. 四面体网格生成
    27. 添加了函数 remove_isolated_vertices() 作为四面体网格生成的后处理步骤。
    28. 多边形网格处理
    29. 添加了函数 CGAL::Polygon_mesh_processing::orient_triangle_soup_with_reference_triangle_soup(),它可以根据参考三角形汤中最近面的方向重新定位三角形汤的面。
    30. 添加了函数 CGAL::Polygon_mesh_processing::compatible_orientations(),它可以从不同的连接组件中检索面的方向的(不)兼容性。
    31. 添加了函数 CGAL::Polygon_mesh_processing::tangential_relaxation(),它将基于区域的切向网格平滑应用于曲面三角形网格的顶点。
    32. 将命名参数访问者添加到函数 triangulate_hole(),它可以使用回调跟踪进度。
    33. 在基于 corefinement 的方法的访问者中添加了更多功能来跟踪进度。
    34. 表面网格简化
    35. 基于 Trettner 和 Kobbelt 的概率方法(使用概率二次曲线的快速和稳健的 QEF 最小化)引入了 Garland-Heckbert 简化算法的四种变体:GarlandHeckbert_plane_policies、GarlandHeckbert_probabilistic_plane_policies、GarlandHeckbert_triangle_policies 和 GarlandHeckbert_probabilistic_triangle_policies。
    36. GarlandHeckbert_policies 类已被弃用,GarlandHeckbert_plane_policies 取而代之。
    37. 点集处理
    38. 一个新的可选命名参数 min_points_per_cell 已添加到 grid_simplify_point_set()。通过在单元格中添加最少数量的点以保留一个点,还可以过滤掉低密度区域和异常值:在密集采样点云的情况下,这比使用网格简化然后去除异常值产生更好的结果,同时非常广阔。默认值为 1 以将先前的行为保持为默认值。
    39. dD 空间搜索
    40. 将成员函数 write_graphviz() 添加到 Kd_tree 类中,该类以 Graphviz 格式将树写入流中。
    41. CGAL 和 Boost 图形库 (BGL)
    42. 在类 Face_filtered_graph 中添加了函数 invert_selection(),该函数切换图形的选中状态:选中的面被取消选中,未选中的面被选中。

    qt下载和安装:

    参考:QT5 安装(Ubuntu20.04) 详细_小小圆脸的博客-CSDN博客_ubuntu安装qt5

    安装Qt的开发工具:

    sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools

    安装qtcreator:

    sudo apt-get install qtcreator

    安装qt:

    sudo apt-get install qt5*

    qt5svg下载:(参考:计算机中丢失qt5svg,在Linux中找不到“Qt5Svg”提供的包配置文件_山遙的博客-CSDN博客

    sudo apt-get install libqt5svg5-dev

    安装gmp:

    下载地址:Gnu Mp 比格纳姆图书馆 (gmplib.org)

    1. tar xf gmp-6.2.1.tar.xz
    2. cd gmp-6.2.1
    3. ./configure --prefix=/home/lyl/download/gmp-6.2.1
    4. make
    5. make check
    6. sudo make install

    确认是否正确安装:/usr/lib/x86_64-linux-gnu/libgmp.so

     参考:Linux(Ubuntu)安装CGAL(非root)_Yilien10的博客-CSDN博客_linux安装cgal

    安装mpfr:

    下载地址:https://www.mpfr.org/mpfr-current/

    1. tar xf mpfr-4.1.0.tar.xz
    2. ./configure --prefix=/home/lyl/download/mpfr-4.1.0 --with-gmp=/home/lyl/download/gmp-6.2.1
    3. make
    4. make check
    5. sudo make install

    确认是否正确安装:/usr/lib/x86_64-linux-gnu/libmpfr.so

    CGAL测试例子编译和运行:

    CMakeLists.txt

    1. # Created by the script cgal_create_cmake_script
    2. # This is the CMake script for compiling a CGAL application.
    3. cmake_minimum_required(VERSION 3.1...3.23)
    4. project(Triangulation_2_Examples)
    5. # find_package(CGAL)
    6. find_package(CGAL COMPONENTS Qt5)
    7. # create a target per cppfile
    8. file(
    9. GLOB cppfiles
    10. RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
    11. ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
    12. foreach(cppfile ${cppfiles})
    13. create_single_source_cgal_program("${cppfile}")
    14. endforeach()
    15. if(CGAL_Qt5_FOUND)
    16. add_definitions(-DCGAL_USE_BASIC_VIEWER)
    17. target_link_libraries(draw_triangulation_2 PUBLIC CGAL::CGAL_Basic_viewer)
    18. else()
    19. message(
    20. STATUS
    21. "NOTICE: The example draw_triangulation_2 requires Qt and will not be compiled."
    22. )
    23. endif()

    find_package(CGAL COMPONENTS Qt5)

    这里的find_package需要添加COMPONENTS Qt5,才能确定找到QT5(QT5的一些模块需要在之前被正确安装才行,比如svg),CGAL_Qt5_FOUND会被设置为ON,后续可以利用CGAL::CGAL_Basic_viewer进行可视化。

    如果不想可视化,则可以用:

    find_package(CGAL)

    此时会提示:

    NOTICE: The example draw_triangulation_2 requires Qt and will not be compiled.

    也可以编译,但是没有可视化工具

    cmake编译选项:

    cmake -DCMAKE_BUILD_TYPE=Release -DCGAL_DIR=/home/leonjin/project/CGAL/cgal-5.5 ..

    每一个列举出来的qt模块都是需要的。如果缺失,比如svg,则会编译会报错。

    draw_triangulation_2.cpp

    1. #include
    2. #include
    3. #include
    4. #include
    5. typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
    6. typedef CGAL::Triangulation_2 Triangulation;
    7. typedef Triangulation::Point Point;
    8. int main(int argc, char* argv[]) {
    9. std::ifstream in((argc>1)?argv[1]:"data/triangulation_prog1.cin");
    10. std::istream_iterator begin(in);
    11. std::istream_iterator end;
    12. Triangulation t;
    13. t.insert(begin, end);
    14. CGAL::draw(t);
    15. return EXIT_SUCCESS;
    16. }

    源码在:CGAL-5.5-examples/CGAL-5.5/examples/Triangulation_2

    draw_triangulation_2运行:

    ./draw_triangulation_2 ../data/triangulation_prog1.cin

    draw_triangulation_3.cpp

    1. #include
    2. #include
    3. #include
    4. #include
    5. typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
    6. typedef CGAL::Delaunay_triangulation_3 DT3;
    7. typedef CGAL::Creator_uniform_3<double,K::Point_3> Creator;
    8. int main()
    9. {
    10. std::vector points;
    11. CGAL::Random_points_in_sphere_3 g(1.0);
    12. std::copy_n(g, 50, std::back_inserter(points));
    13. DT3 dt3(points.begin(), points.end());
    14. CGAL::draw(dt3);
    15. return EXIT_SUCCESS;
    16. }

    源码在:CGAL-5.5-examples/CGAL-5.5/examples/Triangulation_3

    draw_triangulation_3运行:

    ./draw_triangulation_3

  • 相关阅读:
    java计算机毕业设计在线教育系统源程序+mysql+系统+lw文档+远程调试
    19.EC实战 矩阵键盘控制触摸板开关
    Spring最新核心高频面试题(持续更新)
    【嵌入式软件开发】之面试常识(一)
    深入理解计算机系统(CSAPP)bomblab实验进阶之nuclearlab——详细题解
    【微信小程序开发】一文学会使用CSS样式布局与美化
    Java 内部类 面试“变态题”
    [WPF]原生TabControl控件实现拖拽排序功能
    C++——stack和queue的使用和OJ练习题
    GC调优思路
  • 原文地址:https://blog.csdn.net/jin739738709/article/details/126875926