CGAL,Polyhedron和Nef_polyhedron中有三种3D多边形。前者允许指定一个allocator作为其第四模板:如何在CGAL Nef_polyhedron_3中使用Boost Interprocess分配器?
然而,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 stucture 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使用allocator用于其内部数据(但不包括本身):
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
我还不清楚我究竟该插件英寸
马科斯
谢谢。正如我上面所说,知道Nef'3没有自定义分配器的支持。另外,我意识到这是宏(因此我对上面的'编译时间'的评论)。你说应该可以添加没有太多的麻烦,但我真的想找更具体的东西,如果可能的话。 – 2013-03-28 08:12:23
我有一个进一步的想法是继续前进并添加全局CGAL_ALLOCATOR,但能够将其设置为某种模式。在默认模式下,它只是委托给一个std :: allocator。但在另一种模式下,它会使用您之前传递过来的静态缓冲区。 – 2013-03-28 08:14:00