MSVC2022 poly2tri编译
hallucinations-
编辑于 2024年08月26日 00:55

选自个人博客片段

https://www.gislxz.com/index.php/2024/08/25/qtopengl%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%882%ef%bc%89/

cut-off

poly2tri,三角形剖分库,能把多边形进行三角形剖分

https://github.com/jhasse/poly2tri

是我在用opengl做gis数据渲染时需要对多边形进行剖分使用到的

编译时遇到一些问题,完全没找到中文资料,踩了不少坑,记录一下方便后人

首先需要ninja编译

直接用cmake编译会调用出错

我用的msvc2022作为编译器,使用x64 Native Tools Command Prompt for VS 2022,打开到库的根目录(注意不能直接切换到其他盘,比如我的文件在d盘,就要先切换到d盘再cd到目录)

执行以下命令(静态编译调用时会出错,一定得动态编译,不知道为什么,踩了大坑了)

代码块
Shell
自动换行
复制代码
mkdir build
cd build
cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=ON ..
cmake --build
复制成功

另外注意c++版本需要一致,你工程用什么版本就改cmakelists里的版本

build完之后build文件夹里就有dll、lib库文件,头文件在上一层D:\coding\libs\poly2tri-master\poly2tri里

在qt cmake文件里引入(测试用,给的绝对地址,别学)

代码块
Shell
自动换行
复制代码
# 包含头文件目录
target_include_directories(YuiGIS PUBLIC "D:\\coding\\libs\\poly2tri-master\\poly2tri")
# 链接第三方库
target_link_libraries(YuiGIS PUBLIC "D:\\coding\\libs\\poly2tri-master\\build\\poly2tri.lib")
复制成功

测试代码

代码块
C++
自动换行
复制代码
// Define points for a polygon
  std::vector<p2t::Point*> polygon = {
    new p2t::Point(0, 0),
    new p2t::Point(10, 0),
    new p2t::Point(10, 10),
    new p2t::Point(0, 10)

  };
  // Perform triangulation
  p2t::CDT cdt(polygon);
  cdt.Triangulate();
  //Get and process triangles
  std::vector<p2t::Triangle*> triangles = cdt.GetTriangles();
  for (auto* triangle : triangles) {
    qDebug()<<triangle->GetPoint(0)->x<<" "<<triangle->GetPoint(0)->y;
  }
复制成功