Изучение проблемы: перенос Си++ библиотек для работы с облаками точек итриангулированными сетками на 64-битную платформу




Аннотация

Итальянская компания E.G.S. S.r.l. занимается разработкой решений в области моделирования трехмерных объектов на базе триангулированных сеток.

Введение

Итальянская компания E.G.S. S.r.l. занимается разработкой решений в области моделирования трехмерных объектов на базе триангулированных сеток.

Picture 1304280

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

Библиотека компонентов Leios Components

Picture 1304234

Библиотека компонентов Leios Components представляет собой набор различных библиотек:

  • Программный интерфейс для работы с облаками точек и триангулированными сетками.
  • Библиотека подгонки поверхностей.
  • Библиотека для обработки граней и ребер.

Общий объем исходного кода составляет 13 мегабайт (440 000 строк кода), решение состоит из нескольких десятков проектов. Очевидно, что перенос такого объема кода на 64-битную систему вручную представляется затруднительным, особенно учитывая сложность математических алгоритмов.

Для того чтобы представить себе тип кода, который содержится в библиотеке, достаточно посмотреть основные возможности трех указанных компонентов.

Программный интерфейс для работы с облаками точек и триангулированными сетками

  • Библиотека содержит процедуры импорта/экспорта облаков точек и триангулированных поверхностей (форматы ASCII, STL, PLY, OBJ, VRML и собственный формат Leios RVE).
  • Сбор данных о сетки
  • Элементарные операции редактирования сетки.
  • Операции выбора облаков точек и триангулированных поверхностей.
  • Фильтрация облаков точек, подавление шума, сглаживание, офсет.
Picture 1303626
  • Триангуляция облаков точек.
  • Восстановление триангулированной сетки, заполнение отверстий, сглаживание.
Picture 1305018
  • Прореживание и перестройка триангулированной сетки.
Picture 1304243
  • Построение сечений и разбиение триангулированной поверхности с использование плоскости.
  • Создание плоских, цилиндрических или сферических поверхностей из частей сетки.
Picture 1303215
  • Соединение нескольких облаков точек или триангулированных сеток в единый объект.
  • Визуализация облака точек и триангулированной поверхности с помощью библиотеки OpenGL.
  • Регистрация триангулированных поверхностей или облаков точек.
Picture 1303401
  • Процедуры псевдо трехмерной триангуляции (2.5D).
  • Триангуляция облаков точек внутри заданного внешнего контура.
  • Использование временных файлов для осуществления редактирования больших облаков точек в 32 битной среде.
  • Триангуляция между двумя ломаными линиями.
  • Процедура пластической деформации самопересечений сетки.
  • Процедура пластической деформации пересечения ломаных линий двух сеток.
  • Процедура сглаживания ломаных линий и уменьшения размера.
  • Процедура пластической деформации поперечного сечения сетки через две точки на сетке.
  • Процедуры импорта-экспорта с поддержкой координат центра масс с двойной точностью.
  • Процедура автоматического объединения объектов.

Библиотека подгонки деталей

Это расширение библиотеки для управления необработанными NURBS поверхностями при использовании подгонки.

  • Спецификация четырехгранных конфигураций на триангулированной сетке.
  • Автоматическая подгонка поверхностей с автоматической коррекцией NURBS кривыми.
Picture 1304942

Библиотека обработки граней и ребер

Эта библиотека расширения осуществляет:

  • Автоматическое выделение линий скруглений (кривых граней, центральной кривой сетки, кривых ребер).
  • Разбиение сетки на участки без участия скруглений, которые могут быть подогнаны к необработанным NURBS поверхностям.
Picture 1303871

Необходимость миграции библиотеки компонентов на 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.



Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

goto PVS-Studio;


Найденные ошибки

Проверено проектов
367
Собрано ошибок
13 552

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;