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

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

## Введение

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

![a0036_EGS-CaseStudy_ru/image1.png](https://import.viva64.com/docx/blog/a0036_EGS-CaseStudy_ru/image1.png)

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

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

![a0036_EGS-CaseStudy_ru/image2.png](https://import.viva64.com/docx/blog/a0036_EGS-CaseStudy_ru/image2.png)

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

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

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

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

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

* Библиотека содержит процедуры импорта/экспорта облаков точек и триангулированных поверхностей \(форматы ASCII, STL, PLY, OBJ, VRML и собственный формат Leios RVE\)\.
* Сбор данных о сетки
* Элементарные операции редактирования сетки\.
* Операции выбора облаков точек и триангулированных поверхностей\.
* Фильтрация облаков точек, подавление шума, сглаживание, офсет\.

![a0036_EGS-CaseStudy_ru/image3.png](https://import.viva64.com/docx/blog/a0036_EGS-CaseStudy_ru/image3.png)

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

![a0036_EGS-CaseStudy_ru/image4.png](https://import.viva64.com/docx/blog/a0036_EGS-CaseStudy_ru/image4.png)

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

![a0036_EGS-CaseStudy_ru/image5.png](https://import.viva64.com/docx/blog/a0036_EGS-CaseStudy_ru/image5.png)

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

![a0036_EGS-CaseStudy_ru/image6.png](https://import.viva64.com/docx/blog/a0036_EGS-CaseStudy_ru/image6.png)

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

![a0036_EGS-CaseStudy_ru/image7.png](https://import.viva64.com/docx/blog/a0036_EGS-CaseStudy_ru/image7.png)

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

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

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

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

![a0036_EGS-CaseStudy_ru/image8.png](https://import.viva64.com/docx/blog/a0036_EGS-CaseStudy_ru/image8.png)

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

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

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

![a0036_EGS-CaseStudy_ru/image9.png](https://import.viva64.com/docx/blog/a0036_EGS-CaseStudy_ru/image9.png)

## Необходимость миграции библиотеки компонентов на 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](https://pvs-studio.ru/ru/pvs-studio/)\.

Программный продукт 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](https://www.egsolutions.com/)\.