CGAL,Polyhedron和Nef_polyhedron中有两种类型的3D多边形。前者允许指定分配器作为其第四个模板:
但是,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
我仍然不清楚我是如何插入的。
马科斯
答案 0 :(得分:0)
Nef_polyhedron_3目前不支持自定义分配器。但是,可以通过CGAL_ALLOCATOR宏使CGAL使用不同的分配器。但是,这会影响所有可能过多的CGAL标题。但是,应该可以在不太麻烦的情况下为现有代码添加分配器支持。