Вычисление системы ограничений
Основная задача 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).