Pular para o conteúdo
CADCAMFUN
Docs

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.

Ø20 círculo com três tolerâncias Arraste para orbitar · role para ampliar · arraste com o botão direito para deslocar
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.

Constantes

NomeValorSignificado
TOLERANCE_PRESETS0.1, 0.05, 0.01, 0.005, 0.002, 0.001, 0.0005o que a IU oferece, grosseiro a fino
DEFAULT_TOLERANCE0.01editor e padrão de mosaico
MIN_TOLERANCE0.0001abaixo disso isTolerance é falso
MAX_TOLERANCE10acima disso isTolerance é falso
MIN_CURVE_SEGMENTS8menor número de segmentos de um círculo
MAX_CURVE_SEGMENTS2048limite padrão de segmentosFor
MAX_SEGMENTS (tessellate.ts)65 536limite máximo por entidade no tesselator de entidade
MIN_TOLERANCE (tessellate.ts)1e-6piso, então uma tolerância zero não pode produzir contagens ilimitadas
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

Predefinições em números

Real segmentsFor, chordError e decimalsForTolerance saída para cada predefinição:

Tolerância, milímetrossegmentos r 10erro de acorde r 10decimaissegmentos r 50
0.1239.314e-2150
0.05324.815e-2271
0.01 (padrão)719.788e-32158
0.0051004.934e-33223
0.0021581.977e-33352
0.0012239.923e-43497
0.00053154.973e-44703

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.
EntidadeRegra
Linhaseus dois pontos finais
Círculo, Arcocontagem de segmentos de arco do raio, varredura e tolerância, limitada a 65 536
Elipsepasso de parâmetro uniforme h = √(8·tol / a), a raio maior, pelo menos 8 segmentos
Splinelimite analítico de splinePolyline
Polilinhasegmentos abaulados como arcos
Retânguloquatro cantos
Texto, Dimensãosem 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úcleoParâmetro de tolerânciaPadrão
Perfis de esboçosketchProfiles(esboço, tolerância)0.01 mm
Primitivos de malhameshOf(sólido, tolerância)0.1 mm
Coincidência CSGCsgOptions.tolerance1e-7 × extensão
Tesselação B-repTessellateOptions.chordToldiagonal / 2000, em [0.001, 0.05]
Coincidência booleana B-repBooleanOptions.tol1e-8 × tamanho, ≥ 1e-7
Acordes de hélicestepsPerTurn0.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

SintomaCausaConsertar
círculos parecem poligonaistolerância 0.1 em um raio grandeescolha uma predefinição mais precisa; segmentos crescem com √r
viewport lento em um desenho grandetolerância muito fina em muitas curvas0.01 é suficiente para exibição; manter valores mais finos para exportação
comprimento mostra muitos decimaisdecimais seguem a tolerânciadecimaisForTolerance(0.01) = 2
um valor é rejeitado como tolerânciafora [0.0001, 10]usar uma predefinição