Изучение проблемы: перенос Си++ библиотек для работы с облаками точек итриангулированными сетками на 64-битную платформу
- Введение
- Библиотека компонентов Leios Components
- Программный интерфейс для работы с облаками точек и триангулированными сетками
- Библиотека подгонки деталей
- Библиотека обработки граней и ребер
- Необходимость миграции библиотеки компонентов на 64-битную платформу
- Участие компании ООО "СиПроВер" в миграции библиотеки компонентов
Итальянская компания E.G.S. S.r.l. занимается разработкой решений в области моделирования трехмерных объектов на базе триангулированных сеток.
Введение
Итальянская компания E.G.S. S.r.l. занимается разработкой решений в области моделирования трехмерных объектов на базе триангулированных сеток.

Для этой цели она использует собственную библиотеку компонентов Leios Components. Когда компании E.G.S. S.r.l. понадобилось выпустить 64-битную версию своих компонентов, она обратилась к ООО "СиПроВер" как к компании, специализирующейся на разработке анализаторов кода для 64-битных и параллельных приложений.
Библиотека компонентов Leios Components

Библиотека компонентов Leios Components представляет собой набор различных библиотек:
- Программный интерфейс для работы с облаками точек и триангулированными сетками.
- Библиотека подгонки поверхностей.
- Библиотека для обработки граней и ребер.
Общий объем исходного кода составляет 13 мегабайт (440 000 строк кода), решение состоит из нескольких десятков проектов. Очевидно, что перенос такого объема кода на 64-битную систему вручную представляется затруднительным, особенно учитывая сложность математических алгоритмов.
Для того чтобы представить себе тип кода, который содержится в библиотеке, достаточно посмотреть основные возможности трех указанных компонентов.
Программный интерфейс для работы с облаками точек и триангулированными сетками
- Библиотека содержит процедуры импорта/экспорта облаков точек и триангулированных поверхностей (форматы ASCII, STL, PLY, OBJ, VRML и собственный формат Leios RVE).
- Сбор данных о сетки
- Элементарные операции редактирования сетки.
- Операции выбора облаков точек и триангулированных поверхностей.
- Фильтрация облаков точек, подавление шума, сглаживание, офсет.

- Триангуляция облаков точек.
- Восстановление триангулированной сетки, заполнение отверстий, сглаживание.

- Прореживание и перестройка триангулированной сетки.

- Построение сечений и разбиение триангулированной поверхности с использование плоскости.
- Создание плоских, цилиндрических или сферических поверхностей из частей сетки.

- Соединение нескольких облаков точек или триангулированных сеток в единый объект.
- Визуализация облака точек и триангулированной поверхности с помощью библиотеки OpenGL.
- Регистрация триангулированных поверхностей или облаков точек.

- Процедуры псевдо трехмерной триангуляции (2.5D).
- Триангуляция облаков точек внутри заданного внешнего контура.
- Использование временных файлов для осуществления редактирования больших облаков точек в 32 битной среде.
- Триангуляция между двумя ломаными линиями.
- Процедура пластической деформации самопересечений сетки.
- Процедура пластической деформации пересечения ломаных линий двух сеток.
- Процедура сглаживания ломаных линий и уменьшения размера.
- Процедура пластической деформации поперечного сечения сетки через две точки на сетке.
- Процедуры импорта-экспорта с поддержкой координат центра масс с двойной точностью.
- Процедура автоматического объединения объектов.
Библиотека подгонки деталей
Это расширение библиотеки для управления необработанными NURBS поверхностями при использовании подгонки.
- Спецификация четырехгранных конфигураций на триангулированной сетке.
- Автоматическая подгонка поверхностей с автоматической коррекцией NURBS кривыми.

Библиотека обработки граней и ребер
Эта библиотека расширения осуществляет:
- Автоматическое выделение линий скруглений (кривых граней, центральной кривой сетки, кривых ребер).
- Разбиение сетки на участки без участия скруглений, которые могут быть подогнаны к необработанным NURBS поверхностям.

Необходимость миграции библиотеки компонентов на 64-битную платформу
Компания E.G.S. S.r.l. занимается разработкой своих решений с 2002 года, когда в Италии был открыт ее офис. С самых ранних этапов разработки компании были ориентированы на высокопроизводительные настольные системы.
Минимальный компьютер, на котором работает решение E.G.S. S.r.l. имеет следующую конфигурацию (по данным на начало 2008 года):
- Процессор: Intel Core Duo T2300 or higher, AMD X2 3800+ or higher.
- Оперативная память: 2GB
- Графическая карта: Nvidia Quadro / 6x series or higher, ATI/AMD "x" series / FireGL or higher.
- Операционная система: Windows XP Professional SP2 or higher, Windows Vista
В связи с ростом обрабатываемых объемов данных, разумеется, ограничения на оперативную память 32-битной версии (не более 3 гигабайт) оказались недостаточными для серьезных проектов. Поэтому необходимость выпуска 64-битной версии не вызывала вопросов у руководства E.G.S. S.r.l.. Однако под вопросом была возможность быстрого выпуска подобной версии. Вручную просмотреть указанный объем кода практически невозможно.
Участие компании ООО "СиПроВер" в миграции библиотеки компонентов
На помощь пришли специалисты компании ООО "СиПроВер", которые использовали для миграции кода на 64-битную платформу анализатор кода Viva64.
Программный продукт Viva64 обеспечивает диагностику ошибок, специфичных для 64-битных Windows-приложений. Viva64 представляет собой lint-подобный статический анализатор Си/Си++ кода. Области применения Viva64: проверка новых 64-битных программных решений, помощь в переносе 32-битного программного кода на 64-битную систему, оптимизация кода с учетом особенностей 64-битной архитектуры.
Используя Viva64, специалисты ООО "СиПроВер" обеспечили быструю миграцию библиотеки компонентов, обнаружив и исправив проблемные места в исходном коде библиотеки. В результате в процессе миграции такой большой и сложной библиотеки были задействованы всего лишь несколько человек.
Миграция кода с использованием Viva64 позволила сэкономить много времени, которое бы пришлось затратить на ручной просмотр кода. А главное не допустить новых программных ошибок, которые возможны в процессе миграции на новую платформу.
Основные проблемные моменты, выявленные в процессе анализа кода:
- особенности вычислительных алгоритмов при обработке больших объемов данных;
- работа с файлами большого размера;
- обработка 3d-моделей, содержащих большое количество треугольников (чем больше треугольников, тем точнее модели);
- работа подсистемы лицензирования;
Все обнаруженные с помощью анализатора Viva64 проблемы были исправлены, в результате чего 64-битная версия Leios Studio была выпущена в срок с высоким качеством.
E.G.S. S.r.l. - частная компания, миссией которой является разработка программ и решений для развитой обработки результатов 3D сканирования. Офисы компании были открыты в Италии и в Москве в 2002 году. Сайт: http://www.egsolutions.com.