Перейти к содержанию
CADCAMFUN
Документы

Документация

Толерантность и тесселяция

Как один допуск высоты хорды определяет количество сегментов, отображает десятичные дроби и тесселяцию кривых в ядрах САПР.

Автоматически переведено с английского. Смотреть оригинал на английском

Один допуск, каждая кривая

A tolerance is the largest distance the model may be from the true shape, in millimetres. For a circle drawn as a polygon that distance is the chord's sagitta r(1 − cos(π/n)), so the number of segments follows from the tolerance. packages/core/src/cad/tolerance.ts (строк 39) соответствует этому правилу; средство рендеринга редактора, каталог элементов помощника, тесселятор сущностей и тесты — все они используют его.

Окружность Ø20 с тремя допусками Перетащите на орбиту · прокрутите, чтобы увеличить · перетащите вправо, чтобы панорамировать
The same radius-10 circle as segmentsFor gives it: 10 segments at 0.5 mm (chord error 0.489), 23 at 0.1 mm (0.093) and 71 at the 0.01 mm default (0.0098). Each polygon is extruded 2 mm.

Константы

ИмяЦенитьЗначение
TOLERANCE_PRESETS0.1, 0.05, 0.01, 0.005, 0.002, 0.001, 0.0005то, что предлагает пользовательский интерфейс, от грубого до тонкого
DEFAULT_TOLERANCE0.01редактор и тесселяция по умолчанию
MIN_TOLERANCE0.0001ниже этого isTolerance неверно
MAX_TOLERANCE10выше этого isTolerance является ложным
MIN_CURVE_SEGMENTS8наименьшее количество сегментов круга
MAX_CURVE_SEGMENTS2048ограничение сегментов по умолчаниюДля
MAX_SEGMENTS (tesssellate.ts)65 536жесткое ограничение для каждой сущности в тесселяторе сущностей
МИН_ДОПУСК (tesssellate.ts)1e-6нижний предел, поэтому нулевой допуск не может привести к неограниченному количеству
tolerance.ts
export const isTolerance: (value: unknown) => value is number      // finite, in [0.0001, 10]
/** Smallest n ≥ 8 with r(1 − cos(π/n)) ≤ tolerance, capped. */
export const segmentsFor: (radius: number, tolerance: number, cap?: number /* 2048 */) => number
export const chordError: (radius: number, segments: number) => number   // r(1 − cos(π/n))
/** 0.001 → 3, 0.05 → 2, 0.5 → 1; at most 6. */
export const decimalsForTolerance: (tolerance: number) => number

Пресеты в цифрах

Настоящий segmentsFor, chordError и decimalsForTolerance вывод для каждой предустановки:

Допуск, ммсегменты г 10ошибка аккорда r 10десятичные дробисегменты г 50
0.1239.314e-2150
0.05324.815e-2271
0.01 (по умолчанию)719.788e-32158
0.0051004.934e-33223
0.0021581.977e-33352
0.0012239.923e-43497
0.00053154.973e-44703

Краевые случаи, также реальные: segmentsFor(1000, 0.0001) = 2048 (шапка), segmentsFor(2, 5) = 8 (допуск ≥ радиус), isTolerance(0.00005) = ложь, isTolerance(10) = правда, decimalsForTolerance(0.0001) = 4.

Тесселяция объектов рисования

tessellate(entity, tolerance) в tessellate.ts превращает любой объект чертежа в полилинии в пределах допуска хорды. Эта полилиния — это то, что смещает слой CAM и что визуализирует видовой экран. Замкнутая фигура возвращает кольцо, первая и последняя точки которого различаются; заключительный сегмент является неявным.
СущностьПравило
Линиядве его конечные точки
Круг, Дугаколичество сегментов дуги исходя из радиуса, развертки и допуска, ограничено 65 536
Эллипсшаг равномерного параметра h = √(8·tol / a), a больший радиус, не менее 8 сегментов
Сплайнаналитическая граница splinePolyline
Полилиниявыпуклые сегменты в виде дуг
Прямоугольникчетыре угла
Текст, Размернет контура: пустой список

Для эллипса с радиусами 20 и 10 ellipseSegmentCount дает сегменты 100 на расстоянии 0.01 мм и 32 на расстоянии 0.1 мм.

Где соблюдаются допуски

ЯдроПараметр допускаПо умолчанию
Эскизные профилиэскизПрофили(эскиз, допуск)0.01 мм
Примитивы сеткиmeshOf(сплошной, допуск)0.1 мм
CSG совпадениеCsgOptions.tolerance1e-7 × протяженность
Мозаика B-repTessellateOptions.chordTolдиагональ / 2000, в [0.001, 0.05]
B-rep Булево совпадениеBooleanOptions.tol1e-8 × размер, ≥ 1e-7
Helix аккордыstepsPerTurn0.01 мм

Допуск отображения не является допуском обработки

Допуск чертежа определяет способ аппроксимации кривых. Проверка CAM и установка дуги по G-коду имеют свои собственные допуски; см. ядро CAM.

Поиск неисправностей

СимптомПричинаИсправить
круги выглядят многоугольнымидопуск 0.1 на большом радиусевыберите более точный пресет; сегменты растут с ростом √r
область просмотра работает медленно на большом чертежеочень тонкий допуск на многих кривых0.01 достаточно для отображения; сохранять более высокие значения для экспорта
длина показывает слишком много десятичных знаковдесятичные дроби соответствуют допускуdecimalsForTolerance(0.01) = 2
значение отклонено как допускснаружи [0.0001, 10]использовать предустановку