Система геометрических ограничений
Система геометрических ограничений это набор геометрических объектов, взаимосвязанных друг с другом через ограничения и размеры. Типы поддерживаемых геометрических объектов и ограничений приведены соответственно в параграфах Типы поддерживаемой геометрии, Типы поддерживаемых ограничений. Предполагается, что геометрическая модель, которая создается в приложении, имеет свою систему ограничений. С программной точки зрения это означает, что каждая модель ассоциируется с системой ограничений через дескриптор типа 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).