## Вычисление системы ограничений Основная задача C3D Solver, удовлетворение системы ограничений эскиза, выполняется с помощью функции API ```cpp GCE_result GCE_Evaluate(GCE_system gSys) ``` которая возвращает код результат вычислений системы ограничений **gSys**. Функция не будет затрачивать время на вычисления, если на момент её вызова все ограничения удовлетворены. Возвращаемые значения: - **GCE_RESULT_Ok** означает успешное решение системы ограничений, решатель присвоил всем геометрическим объектам новое состояние, удовлетворяющее все заданные ограничения системы. - **GCE_RESULT_Overconstrained** означает, что при попытке вычисления обнаружены ограничения противоречащие друг другу, т.е. в системе ограничений присутствует подмножество, в котором ограничения не могут быть удовлетворены одновременно. Состояние геометрии не меняется. - **GCE_RESULT_Not_Satisfied** означает, что функция не нашла решения, удовлетворяющего всем заданным ограничениям. Состояние геометрии не меняется. Данный диагностический код возвращается при следующих ситуациях: - размер вышел за пределы области значений, допускающих существование решения; - положения фиксированных или замороженных точек вышли за область, допускающую существования решения; - в редких случаях -- плохое начальное приближение. Удовлетворение ограничений требует значительные изменение параметрических координат; - сильные взаимные влияния. Например заданы такие условия, что изменение угла на один градус приводит к смещению объекта на значительные расстояние; - в редких случаях -- численная неустойчивость, обусловленная большим порядком разницы между объектами одного и того же чертежа, например размеры наименьшего и наибольшего объектов эскиза различаются более чем на 7 порядков (Например, один эллипс имеет размер 1 мм, а другой -- 10 км); - в общем случае -- иные ситуации, когда решение не существует или не может быть вычислено. - **GCE_RESULT_InvalidGeometry**. Найдено решение, которое приводит к вырождению геометрических объектов. Например, отрезок или дуга становятся нулевой длины, а окружность или эллипс -- нулевого радиуса. Состояние геометрии при этом не изменяется. Такая ситуация возникает, если функции обратного вызова **GCE_allow_zero_radius**/**GCE_allow_zero_length** запрещают геометрическому объекту (окружности, отрезку или ограниченной кривой) принимать нулевой радиус или длину. Также это может происходить в общем случае, если структура с функциями обратного вызова `GCE_callback_table` используется с настройками по умолчанию (без переопределения по вызову GCE_Register).