Windos 下安裝使用 cgal

  windos下安裝cgal 如果沒有其他需要(cmake默認設置),需要準備三個庫:gmpmpfrboost。如果需要其他設置的話,看需求增加其他庫,我需要eigen3,這裏以eigen3爲例如何增加新的模塊。如果你需要其他的類似。(感覺這種開源庫在windos下玩對於我這種菜鳥來說就是天坑,使用時候各種小問題)

1 cmake配置

根據上邊介紹,我們需要準備:

在這裏插入圖片描述

2 編譯CGAL

  • 按照上部應該是準備好了幾個東西 C:\local\boost_1_72_0
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

  • 打開cmake-gui 並設置
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

  • vs 編譯一下(debug和release)
    在這裏插入圖片描述

  • 編譯完成你的靜態庫和動態庫就都好了
    在這裏插入圖片描述
    在這裏插入圖片描述

3 測試、使用

  怎麼說吧,基本上windos下庫編譯完了都是讓你放到系統path裏。爲了方便找所以我只加了一個WorkDLL,把剛纔編譯好的放進去。(cgal debug和release 名稱不同,一塊放就行,如果是相同的庫,只放release)
在這裏插入圖片描述
在這裏插入圖片描述

  • 使用(靜態鏈接),如果動態的話 target_link_libraries里加-l,在增加dll的路徑。
set(CGAL_DIR  "D:/lib/CGAL/bulid")
find_package(CGAL REQUIRED)
include(${CGAL_USE_FILE})
target_link_libraries(
    ${PROJECT_NAME}
    ${CGAL_LIBS}
    )
  • 測試函數(自相交檢測)
bool CgalSelfIntersection(const char *filename,
                          QList<quint32>  &self_intersected_list,
                          QList<quint32>  &self_intersected_delete_list) {
    typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
    typedef CGAL::Surface_mesh<K::Point_3>             Mesh;
    typedef boost::graph_traits<Mesh>::face_descriptor face_descriptor;
    namespace PMP = CGAL::Polygon_mesh_processing;
    using namespace std;
    ifstream input(filename);
    Mesh mesh;
    if (!input) {
        qWarning() << "off文件打開錯誤";
        return 0;
    }
    std::vector<K::Point_3> points;
    std::vector<std::vector<std::size_t> > polygons;
    if(!input || !CGAL::read_OFF(input, points, polygons) || points.empty()) {
        qWarning() << "Cannot open file ";
        return 0;
    }
    CGAL::Polygon_mesh_processing::orient_polygon_soup(points, polygons);
    CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(points, polygons, mesh);
    input.close();
    bool intersecting = PMP::does_self_intersect(mesh,
                        PMP::parameters::vertex_point_map(get(CGAL::vertex_point, mesh)));
    qDebug() << (intersecting ?
                 "存在自相交" : "不存在自相交");
    QVector<pair<face_descriptor, face_descriptor> > intersected_tris;
    PMP::self_intersections(mesh, back_inserter(intersected_tris));
    qDebug() << intersected_tris.size() << "對三角形相交";
    QVector<pair<face_descriptor, face_descriptor>>::iterator iter;
    for (iter = intersected_tris.begin(); iter != intersected_tris.end(); iter++) {
        self_intersected_list << iter->first << iter->second;
    }
    self_intersected_delete_list = self_intersected_list;
    return 1;
}

4 如何打包

  上邊cmkae裏是靜態鏈接,生成的exe需要cgal的dll,在cgal編譯的bin裏把需要的dll跟自己生成的exe一起打包就好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章