2014-03-05 80 views
0

我有一些二維約束三角剖分。當我添加一個約束錯誤發生。這是我使用它簡單的例子:在二維三角剖分中添加約束時出錯

#include "stdafx.h" 

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> 
#include <CGAL/Constrained_Delaunay_triangulation_2.h> 
#include <CGAL/Constrained_triangulation_plus_2.h> 
#include <vector> 
#include <fstream> 

typedef CGAL::Exact_predicates_inexact_constructions_kernel K; 
typedef CGAL::Triangulation_vertex_base_2<K>      Vb; 
typedef CGAL::Constrained_triangulation_face_base_2<K>   Fb; 
typedef CGAL::Triangulation_data_structure_2<Vb,Fb>    TDS; 
typedef CGAL::Exact_predicates_tag        Itag; 
typedef CGAL::Constrained_Delaunay_triangulation_2<K, TDS, Itag> CDT; 
typedef CGAL::Constrained_triangulation_plus_2<CDT> CDTPlus; 
typedef CDT::Constraint Constraint; 

typedef std::vector<Constraint> Constraints; 

void load_data(const char* filename, Constraints &c) 
{ 
    std::fstream stream(filename, std::ios::in | std::ios::binary);  
    stream.seekp(0, std::fstream::end); 
    std::streamoff size = stream.tellp()/sizeof(Constraint); 
    stream.seekp(0, std::fstream::beg); 
    c.resize((size_t)size); 
    stream.read(reinterpret_cast<char *>(&c.front()), sizeof(Constraint) * size); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Constraints c; 
    load_data("e:\\data.bin", c); 

    CDTPlus cdt; 
    // when i == 53376 - error  
    for (size_t i = 0; i < c.size(); ++i)  
     cdt.insert_constraint(c[i].first, c[i].second);   
    return 0; 
} 

這是我data.bin文件data.bin 這是我的項目link

+0

請編輯您的消息,以便示例代碼進行編譯。目前我們很難調試這個問題。 – lrineau

+0

我改變了這個例子,你可以通過後面的鏈接找到它 – devcrio

+0

你可以發佈第一個例子的完整代碼,你說的那個失敗了嗎? – lrineau

回答

0

模板類CGAL::Constrained_Delaunay_triangulation_2有三個模板參數。第三個參數ITag的默認參數是CGAL::No_intersection_tag。這意味着不處理約束的交集。

可能你的輸入約束確實相交。

+0

我用CGAL :: Exact_predicates_tag作爲ITag參數。 – devcrio