2014-12-06 86 views
0

我有興趣使用CGAL庫實現我的計算幾何算法。 理想情況下,我也有興趣能夠動畫我的算法.CGAL有geomview built in接口,我有興趣用它來演示這些算法。在CGAL中使用時從幾何對象窗口中刪除幾何對象

基於我對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

CGAL開發者目前的趨勢是使用Qt框架和相關的可視化工具,如QGLViewer而非Geomview這是更近的,完全portative並允許你做更多的事情(尤其是如果你想使一個演示您的算法與用戶交互)。

如果你想用CGAL做3D可視化,我會建議你使用QGLViewer,因爲它們在CGAL中已經有很多使用該庫的演示。例如,作爲一個入口點,我會建議你看看Alpha_shape_3演示。這個演示代碼非常簡單直觀,你可以在不理解整個Qt框架的情況下輕鬆添加新的功能(最終你可能不得不這樣做,但學習曲線不會太陡峭,你可以快速開始實施)。

如果你想要做的2D可視化,你可以看下到Alpha_shape_2演示和使用QPainter從QT(注意,您可以結合在QGL觀衆3D和2D瀏覽器如本example