Документация
Толерантность и тесселяция
Как один допуск высоты хорды определяет количество сегментов, отображает десятичные дроби и тесселяцию кривых в ядрах САПР.
Автоматически переведено с английского. Смотреть оригинал на английском
Один допуск, каждая кривая
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) соответствует этому правилу; средство рендеринга редактора, каталог элементов помощника, тесселятор сущностей и тесты — все они используют его.
Константы
| Имя | Ценить | Значение |
|---|---|---|
| TOLERANCE_PRESETS | 0.1, 0.05, 0.01, 0.005, 0.002, 0.001, 0.0005 | то, что предлагает пользовательский интерфейс, от грубого до тонкого |
| DEFAULT_TOLERANCE | 0.01 | редактор и тесселяция по умолчанию |
| MIN_TOLERANCE | 0.0001 | ниже этого isTolerance неверно |
| MAX_TOLERANCE | 10 | выше этого isTolerance является ложным |
| MIN_CURVE_SEGMENTS | 8 | наименьшее количество сегментов круга |
| MAX_CURVE_SEGMENTS | 2048 | ограничение сегментов по умолчаниюДля |
| MAX_SEGMENTS (tesssellate.ts) | 65 536 | жесткое ограничение для каждой сущности в тесселяторе сущностей |
| МИН_ДОПУСК (tesssellate.ts) | 1e-6 | нижний предел, поэтому нулевой допуск не может привести к неограниченному количеству |
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.1 | 23 | 9.314e-2 | 1 | 50 |
| 0.05 | 32 | 4.815e-2 | 2 | 71 |
| 0.01 (по умолчанию) | 71 | 9.788e-3 | 2 | 158 |
| 0.005 | 100 | 4.934e-3 | 3 | 223 |
| 0.002 | 158 | 1.977e-3 | 3 | 352 |
| 0.001 | 223 | 9.923e-4 | 3 | 497 |
| 0.0005 | 315 | 4.973e-4 | 4 | 703 |
Краевые случаи, также реальные: 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.tolerance | 1e-7 × протяженность |
| Мозаика B-rep | TessellateOptions.chordTol | диагональ / 2000, в [0.001, 0.05] |
| B-rep Булево совпадение | BooleanOptions.tol | 1e-8 × размер, ≥ 1e-7 |
| Helix аккорды | stepsPerTurn | 0.01 мм |
Допуск отображения не является допуском обработки
Допуск чертежа определяет способ аппроксимации кривых. Проверка CAM и установка дуги по G-коду имеют свои собственные допуски; см. ядро CAM.
Поиск неисправностей
| Симптом | Причина | Исправить |
|---|---|---|
| круги выглядят многоугольными | допуск 0.1 на большом радиусе | выберите более точный пресет; сегменты растут с ростом √r |
| область просмотра работает медленно на большом чертеже | очень тонкий допуск на многих кривых | 0.01 достаточно для отображения; сохранять более высокие значения для экспорта |
| длина показывает слишком много десятичных знаков | десятичные дроби соответствуют допуску | decimalsForTolerance(0.01) = 2 |
| значение отклонено как допуск | снаружи [0.0001, 10] | использовать предустановку |