2013-03-27 1 views
0

Il existe deux types de polys 3D dans CGAL, Polyhedron et Nef_polyhedron. La première permet de spécifier un un allocateur comme quatrième modèle:Comment utiliser un allocateur Boost Interprocess avec un CGAL Nef_polyhedron_3?

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

Cependant, Nef_polyhedron_3 ne semble pas avoir.

Ce qu'il a est cependant opérateurs iostream, pour analyser à/à partir d'une représentation de chaîne interne:

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

Mais c'est extrêmement lent en effet. En regardant ce code analyseur SNC cependant, il semble qu'il utilise encore en interne un allocateur pour sa structure interne (un objet snc). Mais même si je pouvais obtenir que ceux-ci soient alloués à mon buffer statique (à passer à un autre processus), je ne vois rien dans les constructeurs de Nef_polyhedron_3 ou les fonctions d'accesseur qui me permettent de reconstruire un.

EDIT: Regarder un peu plus loin, je remarque qu'il est un constructeur d'une 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) { 

Et le SNC_structure utilise allocateurs pour ses données internes (mais pas pour lui-même):

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

le problème, qui semble ne fixer sur une base de compilation - je ne dois allouer à un tampon spécifique pour polys Je sais que je dois envoyer à un autre processus.

EDIT 2: Je viens de remarquer que l'un des superclasses Nef_polyhedron_3 est 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_> > 

là, qui utilise lui-même un allocateur aussi:

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

Je suis toujours pas clair comment exactement je branche cela po

Marcos

Répondre

0

Actuellement, Nef_polyhedron_3 ne prend pas en charge l'allocateur personnalisé. Cependant, il est possible de faire en sorte que CGAL utilise un allocateur différent via la macro CGAL_ALLOCATOR. Cependant, cela affectera tous les en-têtes CGAL qui pourraient être trop. Cependant, il devrait être possible d'ajouter le support de l'allocateur au code existant sans trop de problèmes.

+0

Merci. Comme je l'ai dit plus haut, Nef'3 averti n'a pas de support d'allocateur personnalisé. Aussi, je réalise qu'il y a cette macro (d'où mon commentaire sur 'compiler time' ci-dessus). Vous dites qu'il devrait être possible d'ajouter sans trop de problèmes, mais je cherche vraiment quelque chose de plus spécifique si possible. –

+0

Une autre idée que j'avais serait d'aller de l'avant et d'ajouter le global CGAL_ALLOCATOR, mais être en mesure de définir cela à un certain mode. En mode par défaut, il suffit de déléguer à un allocateur std :: allocator. Mais dans un autre mode, il utilisera le tampon statique que vous lui avez déjà transmis. –

Questions connexes