Вычисление системы ограничений

Основная задача C3D Solver, удовлетворение системы ограничений эскиза, выполняется с помощью функции API

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).