Система геометрических ограничений

Система геометрических ограничений это набор геометрических объектов, взаимосвязанных друг с другом через ограничения и размеры. Типы поддерживаемых геометрических объектов и ограничений приведены соответственно в параграфах Типы поддерживаемой геометрии, Типы поддерживаемых ограничений. Предполагается, что геометрическая модель, которая создается в приложении, имеет свою систему ограничений. С программной точки зрения это означает, что каждая модель ассоциируется с системой ограничений через дескриптор типа GCM_system, а каждый его геометрические объект и ограничение представлены своими уникальными дескрипторами типов GCM_geom и GCM_constraint.

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

GCM_system GCM_CreateSystem()

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

GCM_geom GCM_AddPoint(GCM_system gSys, MbCartPoint3D pVal)

Результатом функции является дескриптор геометрической точки, принадлежащей системе ограничений gSys. Параметр pVal задает начальные координаты <x,y,z> точки.

При завершении работы с геометрической моделью, обязательно следует вызвать функцию удаления ее системы ограничений:

void GCM_RemoveSystem(GCM_system gSys)

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

Функция

void GCM_ClearSystem(GCM_system gSys)

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

Также с помощью вызова

bool GCM_ReadSystem(GCM_system gSys, reader & in)

можно сохранить систему ограничений в поток, а вызовом

bool GCM_WriteSystem(GCM_system gSys, writer & out)

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

Внимание! Функции чтения/записи системы ограничений сохраняют только те данные об объектах и ограничениях, которые загружены в C3D Solver. Все исходные данные об объектах и ограничениях модели хранятся на стороне приложения, сохранность которых – забота разработчика приложения. Функции GCM_ReadSystem, GCM_WriteSystem могут оказаться полезными в следующих случаях:

  • передача данных от разработчика приложения разработчику C3D Solver для отладки, в целях технической поддержки. См. также параграф Журналирование вызовов API решателя GCM, где рассмотрено журналирование вызовов GCM в целях отладки и техподдержки;

  • конвертирование нативных форматов в C3D-файл, с некоторой потерей данных;

  • временное сохранение состояния системы ограничений в различных целях (возможна частичная потеря данных для таких ограничений, как механические передачи и зависимости GCM_DEPENDENT).