CGAL の三角形分割のコンテキストで三角形分割の継承されたクラスを使用するにはどうすればよいですか?
基本的に私は次のコードを持っています:
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Triangulation_vertex_base_with_info_2<int,K> Vb;
typedef CGAL::Triangulation_face_base_with_info_2<int,K> Fb;
typedef CGAL::Triangulation_data_structure_2<Vb,Fb> Tds;
typedef CGAL::Delaunay_triangulation_2<K,Tds> Delaunay;
typedef CGAL::Triangulation_2<K,Tds> Triangulation;
typedef Triangulation::Point Point;
...
Triangulation *t = new Delaunay;
...
// x and y are properly defined and instantiated
t->insert(Point(x,y));
もちろん、Delaunay_triangulation_2 は Triangulation_2 を継承しています。
したがって、このコードを実行すると、Triangulation_2 クラスに対してリンクが行われます。つまり、ドローネー三角形分割は実行されず、代わりに通常の三角形分割が実行されます (子メソッドの代わりに親クラス メソッドが実行されます)。
これは、Triangulation_2 の挿入メソッドが virtual として宣言されていないため、再定義が機能しないためだと思います。
これを回避する方法を知っていますか?多分 Constrained_triangulation_2 と Constrained_delaunay_triangulation_2 を使用しますか? (これらのクラスはいくつかの仮想メソッドを定義しますが、ソース コードを読んだことがありますが、明示的な制約を追加しないと使用できないと思います)
何か案は?