0

CGAL には、Polyhedron と Nef_polyhedron の 2 種類の 3D ポリゴンがあります。前者では、4 番目のテンプレートとしてアロケータを指定できます。

http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Polyhedron/Chapter_main.html#Subsection_25.3.5

ただし、Nef_polyhedron_3 にはそれがないようです。

ただし、内部文字列表現との間で解析するための iostream 演算子があります。

https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_3/SNC_io_parser.h

しかし、それは実際には非常に遅いです。

ただし、その SNC パーサー コードを見ると、内部構造 (snc オブジェクト) にまだアロケーターを使用しているようです。しかし、これらを静的バッファーに割り当てることができたとしても (別のプロセスに渡すため)、Nef_polyhedron_3 コンストラクターまたはアクセサー関数を再構築できるものは何も表示されません。

編集:これをもう少し調べると、SNC 構造https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_polyhedron_3.hからのコンストラクターがあることに気付きました:

Nef_polyhedron_3( const SNC_structure& W, SNC_point_locator* _pl, 
          bool clone_pl,
          bool clone_snc) {

また、SNC_structure は内部データにアロケーターを使用します (ただし、それ自体には使用しません)。

https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_3/SNC_structure.h

問題は、コンパイル時にのみ設定されるように見えることです。別のプロセスに送信する必要があることがわかっているポリゴンの特定のバッファに割り当てる必要があるだけです。

編集 2: Nef_polyhedron_3 スーパークラスの 1 つが Handle_for であることに気付きました:

class Nef_polyhedron_3 : public CGAL::Handle_for< Nef_polyhedron_3_rep<Kernel_, Items_, Mark_> >, 
             public SNC_const_decorator<SNC_structure<Kernel_,Items_,Mark_> >

そこには、それ自体もアロケーターを使用しています。

https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Handle_for.h

それをどのように正確にプラグインするかはまだ不明です。

マルコス

4

1 に答える 1

0

Nef_polyhedron_3 は現在、カスタム アロケーターをサポートしていません。ただし、CGAL_ALLOCATORマクロを使用して、CGAL に別のアロケータを使用させることができます。ただし、これはすべての CGAL ヘッダーに影響し、多すぎる可能性があります。ただし、アロケーターのサポートを既存のコードに問題なく追加できるはずです。

于 2013-03-28T00:02:59.143 に答える