2013-03-27 39 views
0

CGAL,Polyhedron和Nef_polyhedron中有三种3D多边形。前者允许指定一个allocator作为其第四模板:如何在CGAL Nef_polyhedron_3中使用Boost Interprocess分配器?

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 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

我还不清楚我究竟该插件英寸

马科斯

回答

0

Nef_polyhedron_3目前不支持自定义分配器。但是,可以通过CGAL_ALLOCATOR宏使CGAL使用不同的分配器。但是,这会影响所有可能太多的CGAL标题。但是,应该可以在不增加任何麻烦的情况下将分配器支持添加到现有代码中。

+0

谢谢。正如我上面所说,知道Nef'3没有自定义分配器的支持。另外,我意识到这是宏(因此我对上面的'编译时间'的评论)。你说应该可以添加没有太多的麻烦,但我真的想找更具体的东西,如果可能的话。 – 2013-03-28 08:12:23

+0

我有一个进一步的想法是继续前进并添加全局CGAL_ALLOCATOR,但能够将其设置为某种模式。在默认模式下,它只是委托给一个std :: allocator。但在另一种模式下,它会使用您之前传递过来的静态缓冲区。 – 2013-03-28 08:14:00

相关问题