07.08.2020 • C3D Vision

Что нового в C3D Vision. Обзор версии 2020

В июне вышел C3D Toolkit 2020, обновленный набор инструментов для разработки инженерных 3D-приложений. В этой статье подробно рассказываем о новинках и усовершенствованиях модуля визуализации C3D Vision — они направлены на ускорение рабочих процессов, сокращение времени на выполнение часто повторяющихся задач, повышение удобства работы.

C3D Vision отвечает за визуальное отображение геометрических моделей и функционирование графического интерфейса инженерного приложения, управляя качеством отрисовки геометрических моделей при использовании математических, программных и аппаратных средств, вследствие чего оптимизирует скорость работы программного обеспечения. В новой версии улучшения сосредоточились, в основном, в трех областях:

Оптимизация процессов взаимодействия с пользователем. Конвертация любых представлений GUI событий в формат Vision, усовершенствование процессов управления и редактирования объектов, обеспечение возможности выбора устройств в пользовательских процессах, минимизация пользовательского кода для генерации сцены — все эти и иные возможности повышают производительность работы с компонентом и удобство его использования.

Новые возможности для работы с геометрическими представлениями и геометрическими объектами. Дополнительные геометрические представления, принципиально новые геометрические объекты для работы с двумерными массивами, масштабные дополнения свойств геометрии объектов имеют своей целью предоставление пользователю дополнительного функционала при построении, редактировании, отрисовке и конвертации геометрии.

Усовершенствование существующих инструментов, например, новые возможности масштабирования, выбора объектов с помощью рамки, сечения плоскостью.

А теперь рассмотрим подробнее.

Фильтрация событий от физических устройств.

В каждой библиотеке, например, Qt или MFC, описание и представление событий выполняются в своем формате, поэтому для работы с любыми библиотеками в Vision был разработан специальный инструмент — фильтр ConverterEventListener.

Он предназначен для конвертации представления GUI событий в формат Vision, при этом источником событий, как правило, является графическое окно, где отрисовывается вся сцена, но могут быть и иные системные объекты, в частности, элемент управления или главное окно. Для иллюстрации взаимодействия реализации пользовательского графического интерфейса и Vision в качестве примеров можно использовать известные библиотеки, представляющие собой источники событий.



Усовершенствование процессов управления и редактирования объектов.

В новой версии обновление отрисовки сцены синхронизировано с отработкой события. Например, при сдвиге мыши и повороте всей сцены обновление кадра происходит после его подготовки, что обеспечивает плавность отрисовки при любых манипуляциях с объектами или со сценой. Кроме того, теперь гарантирована однородность событий при использовании различных физических устройств, примененных в процессе, что и отражено на представленной схеме.



В данном случае процесс работает с двумя источниками событий — клавиатурой и мышью, которые транслируют в процесс однородные события, к примеру, сдвиг по оси Х. В совокупности это позволяет использовать определенные шаблоны в коде.

Определение устройств в пользовательских процессах.

В C3D Vision 2020 пользователь при создании своих процессов может назначить те источники событий, которые необходимы в каждом конкретном случае.



Эти устройства можно настраивать по своему усмотрению. Например, задать для определенных клавиш назначенных устройств выполнение того или иного действия в ходе реализации процесса. Допустим, клавиша «D» клавиатуры отвечает за активизацию сдвига по оси Х, комбинация клавиш «Ctrl+стрелка» — за вращение объекта вокруг выбранной оси и т.д.

Минимизация пользовательского кода для генерации сцены.

Интеграция Vision с математическим ядром осуществляется с помощью двух классов — MathRepresentation и MathGeometry, работающих непосредственно с математическим представлением MbItem.



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

// создать математическое представление
SPrt<MbSurface>* mathRep = createSqrtSinSurface();
// создать визуальное представление
GeometryRep* visRep = SceneGenerator::Instance()->
CreateMathRep(mathRep, MathGeometry::Synchronous);
// создать сегмент с заданным родителем
SceneSegment* segSurface = new SceneSegment(visRep, topParent);


Дополнительные геометрические представления.

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



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



Маркеры и значки

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



Разработан стандартный набор маркеров для обозначения ограничений. При необходимости пользователь может создавать собственные представления с помощью инструмента «Painter».



Карта высот

К новым реализованным инструментам относится и геометрический объект HeightMapSurfaceGeometry, позволяющий работать с двумерным массивом карты высот. Как известно, представить двумерный массив можно с помощью изображения в формате .png или ином формате, поэтому карта высот позволяет рассчитать как автоматически, так и вручную, значения по всем трем координатам.



Sketch и Label

Это новые объекты, базирующиеся на плоскости. Разработаны классы MathSketchRepresentation, MathSketchGeometry, предназначенные для отображения массива двумерных кривых, являющихся наследниками от MbCurve. Также реализованы LabelRepresentation и LabelGeometry, предназначенные для отображения текста с настройкой ориентации изображения.

Новые возможности отрисовки

В C3D Vision 2020 проведены масштабные изменения, нацеленные на улучшение и доработку возможностей отрисовки геометрических объектов, в частности, добавлены новые режимы отрисовки и отображения геометрии с оптимизацией отрисовки и др.

Так, например, ScreenPlaneOnly позволяет определенной геометрии назначить режим отрисовки в плоскости экрана.



SceneSegment* planeScreen = new SceneSegment(pTopParentSegment);
planeScreen->AddFeature(new Feature::ScreenPlaneOnly);

NoScalable задает геометрию сегмента немасштабируемой независимо от изменения общего масштаба сцены.



SceneSegment* noScalableSegment = new SceneSegment(pTopParentSegment);
noScalableSegment->AddFeature(new Feature::NoScalable);

DoubleSidedLighing управляет назначением двустороннего освещения геометрии независимо от общего освещения сцены.



SceneSegment* doubleSidedLighting = new SceneSegment(pTopParentSegment);
doubleSidedLighting->AddFeature(new Feature::DoubleSidedLighting);

RenderMode отображает выбранную геометрию в определенном режиме (тон, полутон, каркас и т.д.).



SceneSegment* renderModeSegment = new SceneSegment(pTopParentSegment);
renderModeSegment->AddFeature(new Feature::RenderMode(rm_Wireframe));

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



SceneSegment* sectionPlanesSegment = new SceneSegment(pTopParentSegment);
sectionPlanesSegment->AddFeature(new Feature::SectionPlanes(12));

Для оптимизации отрисовки сложной геометрии применяется режим FaceCulling. Он позволяет отрисовывать не назначенные грани, а именно те, которые не видны пользователю, либо наоборот, только те, которые видны. Это определяется флагом при создании объекта в FaceCulling. Так, на представленном примере не отрисовываются передние грани.



SceneSegment* faceCullingSegment = new SceneSegment(pTopParentSegment);
faceCullingSegment->AddFeature(new Feature::FaceCulling(bool back));

Отрисовка слоев

Структура параметров RenderLayerSettings позволяет задать режимы отрисовки для определенного слоя, такие как освещение, материал и тип отрисовки. Номер слоя для сегмента сцены определяет функция SetRenderLayer, где первый параметр — номер слоя, а второй параметр является флагом для распространения отрисовки слоя на дочерние сегменты.


Инициализация слоя по умолчанию с двумя добавочными слоями

SceneSegment* pSegment = new
SceneSegment(pTopParentSegment);
pSegment ->SetRenderLayer(1, false);

Новые и усовершенствованные инструменты

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

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


Выбор объектов с помощью объединяющей и секущей рамок

Расширены возможности масштабирования объектов: теперь масштабирование может выполняться с помощью рамки. Инструмент PrCameraZoomBox имеет настройки в зависимости от конфигурации пользователя.



Новый инструмент CoordLocator предназначен для конвертации координат от физических устройств, например, клавиатуры, как правило, в процессах редактирования.

Разработано три вида локаторов:

  • ModelCoordLocator — конвертация значений координат в модельные координаты
  • SurfaceScreenCoordLocator — конвертация значений координат в заданную поверхность
  • CurveScreenCoordLocator — конвертация значений координат в заданную кривую.

Применение локаторов для пересчета координат в пользовательском приложении

Интерактивные манипуляторы

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

В частности, был усовершенствован инструмент CuttingTool — динамическое сечение плоскостью. Добавлено управление положением плоскости с помощью интерактивных инструментов — манипулятора сдвига или манипулятора поворота.



Одним из самых важных нововведений, касающихся интерактивных инструментов, является реализация манипуляторов. Базовый класс манипуляторов называется SceneWidget, применяется как отдельно, так и в составе процессов редактирования объектов. Он представляет некую оболочку, включающую процессы, с помощью которых обеспечивается его поведение, а также модель представления на экране. Процессы, описывающие поведение SceneWidget, могут быть инициализированы локаторами, которые будут определять поведение манипулятора.



В SceneWidget для манипуляторов предусмотрены и реализованы стандартные процессы поведения и их модели, охватывающие около 80% необходимых решений:

  • Hot-point — виджет с определенным представлением и поведением
  • манипулятор сдвига, реализующий сдвиг по определенной оси
  • манипулятор поворота, реализующий вращение вокруг осей.

Мы прилагаем множество усилий для того, чтобы C3D Vision отвечал самым высоким требованиям пользователей. В ближайшей перспективе запланировано решение таких задач, как разработка материалов с поддержкой и использованием шейдеров, включая стандартный набор материалов, основанных на представлении текстового формата .JSON, разработка OcclusionCulling — критически необходимой функции, обеспечивающей оптимальную производительность отрисовки сложных моделей, а также создание продиктованного временем «облачного» решения с сохранением максимально возможного сходства API с Vision и предоставлением привычной среды как для опытных пользователей модуля, так и для новичков.

Артем Максименко, Команда C3D Vision
Автор:
Артем Максименко
Команда C3D Vision

Еще больше полезных материалов, кейсов и учебных материалов в нашей рассылке.
Присоединяйтесь.

Поделиться материалом