StromanStroman 2023-05-23 15:27 采纳率: 45%
浏览 12
已结题

为啥add_face会失败?

我正在使用CGAL实现一个三角网格细分的功能。
我删除了三角网格中的一个单元格,然后对每条边进行中点分割,从而把一个单元格划分成4个小三角形。
我先删除原来的大三角形,再插入4个新创建的小三角形。
我发现只能插入中间的小三角形,其余的都是null_face()。
我尝试过调整新的面片的顶点序,但是发现无济于事,请问该咋解决?

CGAL
Surface_mesh

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-24 00:17
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      针对该问题,可以先使用循环器找到需要删除的单元格,然后将其边界上的顶点的关联半边设置为边界半边。之后,使用循环器遍历当前单元格的每条边,计算出中点,然后将每条边分别与中点相连形成4个小三角形,插入到网格中。代码实现如下:

      // assume m is the Surface_mesh object
      // assume fh is the face descriptor of the cell to be split
      Mesh::Halfedge_around_face_circulator fvit = m.halfedges(fh), done(fvit);
      Mesh::Vertex_around_face_circulator vvit = m.vertices(fh), vdone(vvit);
      // set all border halfedges to be properly labeled
      for(; fvit != done; ++fvit) {
          if(m.is_border(*fvit)) {
              m.set_vertex_halfedge_to_border_halfedge(m.target(*fvit));
          }
      }
      // iterate through the edges and add new triangles
      fvit = m.halfedges(fh);
      Mesh::Point p0, p1;
      for(; fvit != done; ++fvit, ++vvit) {
          Mesh::Halfedge_index he = *fvit;
          Mesh::Vertex_index va = m.target(he);
          Mesh::Vertex_index vb = m.target(m.next(he));
          Mesh::Vertex_index vc = *vvit;
          p0 = m.point(va) + m.point(vb);
          p0 = 0.5 * p0;
          p1 = m.point(vc);
          Mesh::Vertex_index vm = m.add_vertex(p0);
          Mesh::Face_index fn = m.add_face(va, vm, vc);
          m.add_face(vb, vc, vm, fn);
          m.set_vertex_halfedge(vc, fn);
      }
      // remove the cell to be split
      m.remove_face(fh);
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月12日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据