Documentação
Tolerância e mosaico
Como uma tolerância de altura de corda decide a contagem de segmentos, exibe decimais e tesselação de curvas nos núcleos CAD.
Traduzido automaticamente do inglês. Ver o original em inglês
Uma tolerância, cada curva
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 linhas) mantém essa regra; o renderizador do editor, o catálogo de elementos do assistente, o tessellator de entidade e os testes, todos o utilizam.
Constantes
| Nome | Valor | Significado |
|---|---|---|
| TOLERANCE_PRESETS | 0.1, 0.05, 0.01, 0.005, 0.002, 0.001, 0.0005 | o que a IU oferece, grosseiro a fino |
| DEFAULT_TOLERANCE | 0.01 | editor e padrão de mosaico |
| MIN_TOLERANCE | 0.0001 | abaixo disso isTolerance é falso |
| MAX_TOLERANCE | 10 | acima disso isTolerance é falso |
| MIN_CURVE_SEGMENTS | 8 | menor número de segmentos de um círculo |
| MAX_CURVE_SEGMENTS | 2048 | limite padrão de segmentosFor |
| MAX_SEGMENTS (tessellate.ts) | 65 536 | limite máximo por entidade no tesselator de entidade |
| MIN_TOLERANCE (tessellate.ts) | 1e-6 | piso, então uma tolerância zero não pode produzir contagens ilimitadas |
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 Predefinições em números
Real segmentsFor, chordError e decimalsForTolerance saída para cada predefinição:
| Tolerância, milímetros | segmentos r 10 | erro de acorde r 10 | decimais | segmentos r 50 |
|---|---|---|---|---|
| 0.1 | 23 | 9.314e-2 | 1 | 50 |
| 0.05 | 32 | 4.815e-2 | 2 | 71 |
| 0.01 (padrão) | 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 |
Casos extremos, também reais: segmentsFor(1000, 0.0001) = 2048 (o limite), segmentsFor(2, 5) = 8 (tolerância ≥ raio), isTolerance(0.00005) = falso, isTolerance(10) = verdadeiro, decimalsForTolerance(0.0001) = 4.
Entidades de desenho tesseladas
tessellate(entity, tolerance) em tessellate.ts transforma qualquer entidade de desenho em polilinhas dentro da tolerância da corda. Essa polilinha é o que a camada CAM compensa e o que a janela de visualização renderiza. Uma forma fechada retorna um anel cujo primeiro e último pontos são diferentes; o segmento de fechamento está implícito.
| Entidade | Regra |
|---|---|
| Linha | seus dois pontos finais |
| Círculo, Arco | contagem de segmentos de arco do raio, varredura e tolerância, limitada a 65 536 |
| Elipse | passo de parâmetro uniforme h = √(8·tol / a), a raio maior, pelo menos 8 segmentos |
| Spline | limite analítico de splinePolyline |
| Polilinha | segmentos abaulados como arcos |
| Retângulo | quatro cantos |
| Texto, Dimensão | sem contorno: lista vazia |
Para uma elipse com raios 20 e 10, ellipseSegmentCount fornece 100 segmentos em 0.01 mm e 32 em 0.1 mm.
Onde as tolerâncias se encontram
| Núcleo | Parâmetro de tolerância | Padrão |
|---|---|---|
| Perfis de esboço | sketchProfiles(esboço, tolerância) | 0.01 mm |
| Primitivos de malha | meshOf(sólido, tolerância) | 0.1 mm |
| Coincidência CSG | CsgOptions.tolerance | 1e-7 × extensão |
| Tesselação B-rep | TessellateOptions.chordTol | diagonal / 2000, em [0.001, 0.05] |
| Coincidência booleana B-rep | BooleanOptions.tol | 1e-8 × tamanho, ≥ 1e-7 |
| Acordes de hélice | stepsPerTurn | 0.01 mm |
Tolerância de exibição não é tolerância de usinagem
A tolerância do desenho controla como as curvas são aproximadas. A verificação CAM e o ajuste do arco com código G possuem suas próprias tolerâncias; veja o kernel CAM.
Solução de problemas
| Sintoma | Causa | Consertar |
|---|---|---|
| círculos parecem poligonais | tolerância 0.1 em um raio grande | escolha uma predefinição mais precisa; segmentos crescem com √r |
| viewport lento em um desenho grande | tolerância muito fina em muitas curvas | 0.01 é suficiente para exibição; manter valores mais finos para exportação |
| comprimento mostra muitos decimais | decimais seguem a tolerância | decimaisForTolerance(0.01) = 2 |
| um valor é rejeitado como tolerância | fora [0.0001, 10] | usar uma predefinição |