c++ - 在 CGAL 中使用时从 geomview 窗口中删除几何对象

标签 c++ computational-geometry cgal

我有兴趣使用 CGAL 库实现我的计算几何算法。 理想情况下,我也有兴趣能够为我的算法制作动画。CGAL 有一个到 geomview built in 的接口(interface)。我有兴趣用它来说明这些算法。

基于我对 CGAL geomview 界面的了解(来自 example ),下面是我编写的一个非常简单的代码,它插入 5 个随机点,并在一些点之间进行分段。

但是,一旦我将对象渲染到屏幕上,我不知道如何取消渲染它们或从 geomview 窗口中删除它们,如果它们需要在 我的算法的下一次迭代(比方说)。那么我将如何修改下面的代码来做到这一点呢?

如果有人知道比使用 geomview 用 CGAL 动画几何算法更好的方法,那也会有所帮助。

#include <iostream>
#include <vector>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> 
#include <unistd.h> 
#include <CGAL/IO/Geomview_stream.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point_2; 
typedef K::Segment_2 Segment_2; 
using namespace std;

int main(int argc, char *argv[])
{

  Point_2 points[5] = { Point_2(0.,0.), Point_2(10.,0.),Point_2(10.,10.),Point_2(6.,5.),Point_2(4.,1.) }; 

  CGAL::Geomview_stream gv(CGAL::Bbox_3(-12, -12, -0.1, 12,12,0.1));

  gv << CGAL::RED; // red points
  for (int i = 0; i <= 2; ++i)
    {
       gv << points[i]; 
    }

  gv << CGAL::BLUE;// bluepoints
  for (int i = 3; i <= 4; ++i)
    {
      gv << points[i];  
    }

  // segments between some points
  gv << CGAL::BLACK;
  Segment_2 AB = Segment_2(points[0],points[1]); 
  gv << CGAL::YELLOW << AB ; 
  Segment_2 CD = Segment_2(points[1],points[2]);
  gv << CGAL::BLUE <<   CD ; 

  sleep(300);
  return 0;
}

最佳答案

CGAL 开发人员的当前趋势是使用 Qt 框架和相关的可视化工具,例如 QGLViewer而不是更新的 Geomview,完全便携并允许您做更多的事情(特别是如果您想通过用户交互为您的算法制作演示)。

如果您想使用 CGAL 进行 3D 可视化,我会建议您使用 QGLViewer,因为在使用该库的 CGAL 中已经有很多演示。例如,作为切入点,我建议您看一下 Alpha_shape_3 演示。这个演示的代码非常简单明了,您可以轻松添加新功能,而无需先了解整个 Qt 框架(您最终可能必须了解,但这样学习曲线就不那么陡峭,您可以快速开始实现)。

如果您想进行 2D 可视化,您可以查看 Alpha_shape_2 演示并使用 QPainter来自 Qt(请注意,您可以在 QGL 查看器中组合 3d 和 2d 查看器,如本 example 所示。

关于c++ - 在 CGAL 中使用时从 geomview 窗口中删除几何对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27327264/

相关文章:

c++ - 遍历CGAL生成的子域中的四面体和顶点

c# - 如何在 C# 和 C++ 之间进行互操作

c++ - 删除列表中元素的问题

algorithm - 具有圆弧的形状的 Minkowski 和

java - 如何在扫描线算法中检测正确的端点

python - 如何列出矩形联合中的所有点

c++ - CGAL::交集错误

c++ - 如何在 gcc 编译器的 c/c++ 中获取运行的可执行文件名称

java - flatbuffers c++ 从缓冲区转换为对象仅适用于 root_type(而 java 拥有所有)

centos - 如何在 CentOS 7(或 CentOS 6)上安装 cgal?