У меня есть массив точек, которые были загружены внешней библиотекой, Assimp, в свой собственный класс aiVector3D
(который не имеет функций доступа к компонентам, просто открытый доступ к переменным-членам), и я хочу обработать эти точки используя CGAL's Обработка набора точек библиотека.Как использовать класс, отличный от CGAL Point_3, для обработки набора точек?
Поскольку у меня есть 10 миллионов из этих точек (и может когда-нибудь быть миллиардами), я не хочу создавать новый массив CGAL Point_3
, если я могу ему помочь.
documentation говорит:
Пользователи этого пакета могут использовать другие типы для представления позиции и нормалей, если они реализуют соответствующие карты свойств.
который, кажется, подразумевает, что я могу добиться того, чего я хочу, создав карту собственности, которая отображает aiVector3D
в Point_3
, но после прочтения обоих документов CGAL-х и подталкивания'S это мне не ясно, как я бы об этом.
Я прав, думая, что это путь? Если да, то как мне это сделать?
Я считаю, что вы завышая стоимость копирования точек на вектор CGAL точек. Вы можете управлять с помощью карты свойств точки, которая преобразует aiVector3D в точку cgal на лету (см. Boost :: function_property_map для простого способа создания такой карты свойств), но я сомневаюсь, что экономия стоит того. –
Две причины, по которым я хочу избежать простой копии: 1) набор входных точек может составлять миллиарды в один день и иметь две копии в памяти может вызвать проблемы. 2) Он просто не кажется * элегантным. 1) можно смягчить с помощью файлов с отображением памяти, а 2) можно поместить в ящик и проигнорировать :) Я попробую 'boost :: function_property_map' и запустил некоторые эталонные тесты. – MerseyViking