## Управляющие и вариационные размеры Размеры отличаются от логических ограничений (параллельность, перпендикулярность и т.д.) тем, что они связаны с числовой величиной (скаляром) -- *значением размера*. Значение размера можно задать двумя способами: - **Управляющий размер**. Значение размера задается независимым числовым параметром, который дается пользователем и может меняться только из вне через API решателя (вызов **GCE_ChangeDrivingDimension**). В этом случае размер не зависит от геометрии, а наоборот, геометрия подчиняется размеру также как геометрическому ограничению. Размеры с таким способом задания требуются для того, чтобы управлять геометрией с помощью размерных параметров, и называются соответственно **управляющими**. - **Вариационный размер**. Значение размера задается числовой переменной, которая является таким же предметом вычислений решателя, как и геометрия. Фактически текущее значение будет ассоциировано с переменной, которая специально создается с помощью вызова **GCE_AddVariable**, и может быть повторно применена в других размерах или уравнениях. Значение переменой размера может меняться под влиянием геометрии. Такой способ задания применяется в тех случаях, когда требуется не установить размер, а измерить его. Размеры, связанные с варьируемой переменной, называются **вариационными**. Иногда требуется создать *вариационный* размер, действующий, как *управляющий*, особенно когда необходимо управлять одновременно двумя и более размерами, завязанными на один числовой параметр. В этом случае можно создать один или несколько вариационных размеров с одной переменной, которую можно сделать *управляющим параметром* с помощью вызова: ```cpp constraint_item GCE_FixVariable(GCE_system gSys, var_item var), ``` где **var** -- дескриптор переменной размера. Функция вернет ограничение *управляющий параметр*, фиксирующее переменную **var** с её текущим значением. После вызова **GCE_FixVariable** переменная фактически становится независимым параметром системы ограничений и может меняться только извне, с помощью вызова **GCE_ChangeDrivingDimension**, примененным к дескриптору полученного ограничения. Варьирование управляющими размерами и параметрами осуществляется с помощью метода ```cpp GCE_result GCE_ChangeDrivingDimension(GCE_system gSys, constraint_item dItem , double dVal). ``` Входными параметрами метода являются: - **gSys** -- система ограничений параметричеcкого эскиза; - **dItem** -- дескриптор управляющего размера или управляющего параметра; - **dVal** -- требуемое значение управляющего размера или управляющего параметра. Функция вернет код GCE_RESULT_Ok, если операция выполнена успешно. Если функция вернет код ошибки (отличный от GCE_RESULT_Ok), это может быть связано с одной из следующих причин: - недействительные дескрипторы системы или ограничения **gSys** и **dItem**; - присланное ограничение не является управляющим размером или управляющим параметром, например, если ограничение -- вариационный размер. Следует учитывать, что данная функция не выполняет вычислений, а только подготавливает изменение управляющего размера или параметра. Чтобы изменение вступило в силу, необходимо вызвать вычислительную функцию **GCE_Evaluate**. Если требуется изменить одновременно два и более управляющих размеров, следует сначала сделать серию подготовительных вызовов **GCE_ChangeDrivingDimension** на каждый управляющий параметр или размер, а затем одним вызовом **GCE_Evaluate** вычислить новое положение геометрии, подчиненное новому состоянию управляющих размеров или параметров.