明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 642|回复: 4

ObjectArx 使用 CGAL ,50ms 十万级离散点生成三角网

  [复制链接]
发表于 2025-6-28 12:24:47 | 显示全部楼层 |阅读模式
本帖最后由 枫叶棋语 于 2025-6-28 12:31 编辑
  1. void createDT() {
  2.   setFocusDoc();
  3.   // 使用最快的Epick内核(现代C++语法)
  4.   using Kernel = CGAL::Epick;
  5.   using CGAL_Point = Kernel::Point_2;
  6.   using Delaunay = CGAL::Delaunay_triangulation_2<Kernel>;

  7.   DbTrans tr;
  8.   auto btr = tr.currentSpace();
  9.   int count = 1000;
  10.   auto res = MapleGetInt();
  11.   if (res.Ok) {
  12.     count = res.Value;
  13.   }

  14.   // 生成随机点集
  15.   std::vector<CGAL_Point> points;
  16.   points.reserve(count + 1);  // 预分配内存
  17.   std::random_device rd;
  18.   std::mt19937 gen(rd());
  19.   std::uniform_real_distribution<> dis(0.0, 10000.0);

  20.   for (int i = 0; i <= count; ++i) {
  21.     points.emplace_back(dis(gen), dis(gen));
  22.   }

  23.   // 在CAD中绘制点
  24.   for (const auto& pt : points) {
  25.     AcDbPoint* dbpoint = new AcDbPoint({ pt.x(), pt.y(), 0 });
  26.     dbpoint->setColorIndex(1);
  27.     tr.addEntity(btr, dbpoint);
  28.   }

  29.   // CGAL三角剖分(带空间排序优化)
  30.   TimeSpan span; //计时
  31.   CGAL::spatial_sort(points.begin(), points.end());   // 加速关键步骤
  32.   Delaunay dt(points.begin(), points.end());
  33.   span.hasRuntime(L"CGAL 三角剖分耗时:"); //打印计时

  34.   // 绘制三角形
  35.   for (auto face = dt.finite_faces_begin(); face != dt.finite_faces_end(); ++face) {
  36.     AcDbPolyline* poly = new AcDbPolyline();
  37.     poly->setColorIndex(3);
  38.     poly->setClosed(true);

  39.     // 添加三角形三个顶点
  40.     for (int i = 0; i < 3; ++i) {
  41.       auto& pt = face->vertex(i)->point();
  42.       poly->addVertexAt(i, { pt.x(), pt.y() });
  43.     }
  44.     tr.addEntity(btr, poly);
  45.   }
  46. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
gzxl + 1 绘制 AcDb3dPolyline 呢,花费时间多少

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2025-6-29 09:05:39 | 显示全部楼层
绘制很慢,代码耗时全部花在绘制上
回复 支持 反对

使用道具 举报

发表于 2025-6-30 01:13:42 来自手机 | 显示全部楼层
速度不如倪尧翻译的那个C库,依赖性也小
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-30 02:04:43 | 显示全部楼层
bskidtf 发表于 2025-6-30 01:13
速度不如倪尧翻译的那个C库,依赖性也小

这个速度已经非常快了啊
回复 支持 反对

使用道具 举报

发表于 2025-6-30 23:16:25 | 显示全部楼层
本帖最后由 gzxl 于 2025-6-30 23:18 编辑

只需平面(不考虑Z值的),可以做到比CGAL还快。
当然楼主又提供了另一种实现的方式,值得借鉴。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-27 04:21 , Processed in 0.175801 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表