Фиксация и заморозка геометрических объектов

Любой геометрический объект, созданный в системе ограничений, изначально свободен, т.е. имеет полную степень свободы, свойственную его типу. При вычислениях C3D Solver может менять состояние геометрических объектов, когда это требуется для удовлетворения ограничений. Иногда требуется обездвижить часть геометрии так, чтобы решатель оставлял положение геометрического объекта без изменений. Для этого в API GCE предусмотрены вызовы, которые могут заморозить или зафиксировать геометрический объект. Состояние замороженных или фиксированных геометрических объектов может поменять только приложение с помощью вызовов:

GCE_SetPointXY и GCE_SetCoordValue.

Заморозку геометрических объектов удобно применять, когда требуется обеспечить неподвижность какой-то части чертежа. Например, в системе САПР часть геометрии чертежа может быть получена проецированием из трехмерной модели, и поэтому навсегда связана с ней односторонней ассоциативной связью: «объемная модель → плоское отображение». Заморозить геометрический объект можно с помощью метода

bool GCE_FreezeGeom(GCE_system gSys, geom_item g).  

Метод вернет значение true, если геометрический объект g стал фактически замороженным. Надо заметить, что заморозка не считается ограничением, поэтому метод GCE_IsConstrainedGeom не принимает во внимание заморожен объект или нет. Степень свободы замороженного объекта равна 0.

Альтернативный способ сделать геометрический объект неподвижным для решателя – это задать ограничение фиксация объекта с помощью метода

constraint_item GCE_FixGeom(GCE_system gSys, geom_item g).   

Функция зафиксирует объект g, принадлежащий системе ограничений gSys, и вернет дескриптор вновь добавленного ограничения «фиксация объекта». В отличие от GCE_FreezeGeom данный метод создает ограничение, которое в любой момент можно удалить методом GCE_RemoveConstraint и тем самым освободить объект. Ограничение фиксация рассмотрена также в параграфе Унарные ограничения: горизонтальность/вертикальность и варианты фиксации