Sketcher helper constraint/ru

Обзор

Пример вспомогательного ограничения (Constraint5 - точка на окружности) для касательного ограничения (Constraint6; в режиме касательной-через-точку). В данном случае используется только одно вспомогательное ограничение, так как точка касания является конечной точкой главного диаметра эллипса, который по своей природе лежит на эллипсе.

Вспомогательные ограничения - это обычные ограничения скетчера, которые необходимы как часть более сложных ограничений, но выставляются в пользовательском интерфейсе, чтобы помочь справиться с избыточностью. Например, для ограничения Закон Снелля две линии, представляющие лучи света, должны быть соединены (Ограничением Совпадения), а их соединение должно лежать на границе раздела сред с (Ограничением точки на объекте).

Вспомогательные ограничения будут добавлены автоматически, когда они понадобятся. Решение о том, нужны ли они, в настоящее время принимается путём оценки погрешности вспомогательных ограничений для текущего состояния геометрии (это может измениться в будущих версиях). Если ошибка достаточно мала, ограничение считается ненужным, и оно не будет добавлено. В некоторых случаях такая логика может привести к ошибкам (ограничение может быть выполнено случайно, что легко может произойти при включенной привязке к сетке Скетчера).

Если это произойдёт (вспомогательное ограничение отсутствует, а необходимые условия не выполняются), сложное ограничение будет нарушено. Оно будет что-то делать, но фактическое поведение не будет определено. Такое сломанное ограничение можно исправить, добавив недостающее вспомогательное ограничение вручную.

Вспомогательные ограничения в настоящее время требуются для:

Написание скриптов

Когда ограничения, требующие вспомогательных элементов, добавлены из Python, вспомогательные ограничения автоматически не будут добавлены. Автоматическое принятие решений командами пользовательского интерфейса можно воспроизвести в сценарии, протестировав следующие функции, которые были добавлены специально для этой цели и используются в процедурах пользовательского интерфейса:

Sketch.isPointOnCurve(icurve,x,y)

isPointOnCurve проверяет, виртуальную точку, заданная координатами эскиза x,y (значения float), удовлетворяет-ли ограничению виртуальной точки на объекте - т.е. лежит на кривой, заданной индексом кривой icurve. Возвращает True, если точка лежит на кривой, и False, если нет.

Sketch.calculateConstraintError(iconstr)

calculateConstraintError оценивает функцию ошибки ограничения, указанного индексом iconstr в эскизе. Если в ограничении есть только одна функция ошибки, то возвращаемое значение - это знаковое возвращаемое значение функции ошибки. Если с ограничением связано более одной функции ошибки (т.е. ограничение устраняет более одной степени свободы), то возвращаемое значение - среднеквадратичное значение всех функций ошибки (всегда положительное).