0

CGAL 中有两种类型的 3D 多边形,Polyhedron 和 Nef_polyhedron。前者允许将分配器指定为其第四个模板:

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 超类之一是 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 回答