Встраивание в приложение компонента GCM
Геометрический решатель GCM построен, как общецелевой компонент трехмерного параметрического моделирования. Это значит, что его можно встроить в любое приложение, где требуется снабдить трехмерную геометрическую модель функциональностью размеров и ограничений. Главная особенность в том, что интеграция с C3D Solver не требует ничего менять в структурах данных приложения.
Программный интерфейс C3D Solver имеет свою собственную отвлеченную (abstract) систему типов данных, никак не связанную с типами данных модуля C3D Modeler. Поэтому для работы с решателем приложение может использовать или не использовать структуры данных модуля C3D Modeler. Чтобы подключить геометрический решатель к управлению геометрической моделью, необходимо обеспечить следующую цепочку взаимодействий приложения с решателем:
Создать систему геометрических ограничений (см. GCM_CreateSystem). Это первое что необходимо сделать, что бы начать работу с C3D Solver.
Добавить объекты в систему ограничений. Нужно добавить геометрические объекты в систему с помощью вызовов GCM_AddGeom, GCM_SubGeom (подробнее в Добавление и удаление геометрических объектов). Дескрипторы (см. Таблица 31.6.1. Дескрипторные типы данных), которые выдадут эти функции, используются для хранения ссылок объектов приложения на геометрические объекты C3D Solver. Для оптимизации памяти не рекомендуется добавлять объекты, пока они не связаны ограничениями.
Добавить геометрические ограничения в систему. Добавить ограничения с помощью вызовов, рассмотренных в Добавление и удаление геометрических ограничений. Ограничения приложения ссылаются на ограничения C3D Solver с помощью специальных дескрипторов (см. Таблица 31.6.1. Дескрипторные типы данных).
Решить систему ограничений. С помощью вызова GCM_Evaluate C3D Solver вычисляет новое состояние геометрических объектов, удовлетворяющее объявленным ранее ограничениям.
Применить результаты вычислений. Необходимо применить вычисленные координаты объектов из системы ограничений C3D Solver к геометрическим объектам приложения. Результат вычислений хранится внутри C3D Solver, поэтому приложение должно обновить состояние своих объектов, запросив у решателя новые значения координат.
Удаление объектов и ограничений. При завершении сеанса работы с системой ограничений приложение вызывает метод GCM_RemoveSystem. Также в процессе жизни системы ограничений могут удаляться отдельно ограничения и объекты, как только в них отпадает необходимость (см. Добавление и удаление геометрических объектов).
Для адаптации геометрического решателя к нативным типам данных приложения следует организовать интерфейс между приложением и компонентом GCM. На рис. 1 изображена примерная схема взаимодействия решателя ограничений с приложением, где предлагается на стороне приложения реализовать специальный Constraint Manager, отвечающий следующим задачам:
скрывает за собой API C3D Solver и предоставляет для приложения интерфейс, более удобный, выраженный в нативных данных приложения;
загружает в решатель данные об объектах и ограничениях 3D-модели (формулировка геометрической задачи);
обрабатывает командные запросы такие, как добавление/удаление данных системы ограничений, запросы на вычисления;
обеспечивает обратную связь с решателем, применяет результаты вычислений C3D Solver к геометрической модели приложения;
обновляет данные решателя для синхронизации с моделью приложения.
Рис. 1
Схема на рис. 1 не является обязательной, а только демонстрирует один из возможных путей интеграции C3D Solver с приложением.
Также компонент GCM не позволяет сохранять данные пользователя в файл документа, поэтому разработчик приложения должен позаботиться о чтении/записи системы ограничений 3D-модели в документе приложения.