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

时间:2014-12-06 01:26:10

标签: c++ computational-geometry cgal

我对使用CGAL库实现计算几何算法感兴趣。 理想情况下,我也有兴趣能够为我的算法设置动画.CGAL有一个geomview built in的界面,我有兴​​趣用它来说明这些算法。

根据我对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;
}

1 个答案:

答案 0 :(得分:1)

CGAL开发人员目前的趋势是使用Qt框架和相关的可视化工具,例如QGLViewer而不是Geomview,这些工具是最近的,完全具有移植性,并允许您做更多的事情(特别是如果你想做一个通过用户交互为您的算法演示。)

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

如果你想进行2D可视化,你可以查看Alpha_shape_2演示并使用Qt中的QPainter(注意你可以在QGL查看器中结合使用3d和2d查看器,如下所示{{3 }}