Saltar al contenido
CADCAMFUN
Documentos

Documentación

Tolerancia y teselación

Cómo una tolerancia de altura de cuerda decide el recuento de segmentos, muestra decimales y teselado de curvas en los núcleos de CAD.

Traducido automáticamente del inglés. Ver el original en inglés

Una tolerancia, 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 líneas) cumple esa regla; el renderizador del editor, el catálogo de elementos del asistente, el teselador de entidades y las pruebas lo utilizan.

Ø20 círculo con tres tolerancias Arrastrar para orbitar · desplazarse para hacer zoom · arrastrar con el botón derecho para desplazarse
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

NombreValorSignificado
TOLERANCE_PRESETS0.1, 0.05, 0.01, 0.005, 0.002, 0.001, 0.0005lo que ofrece la interfaz de usuario, de grueso a fino
DEFAULT_TOLERANCE0.01editor y teselación predeterminados
MIN_TOLERANCE0.0001debajo de esto está la tolerancia es falsa
MAX_TOLERANCE10arriba de esto está la tolerancia es falsa
MIN_CURVE_SEGMENTS8el menor número de segmentos de un círculo
MAX_CURVE_SEGMENTS2048límite predeterminado de segmentos para
MAX_SEGMENTS (teselado.ts)65 536límite máximo por entidad en el teselador de entidades
MIN_TOLERANCE (tesselado.ts)1e-6piso, por lo que una tolerancia cero no puede producir recuentos ilimitados
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

Presets en números

Real segmentsFor, chordError y decimalsForTolerance salida para cada preset:

Tolerancia, mmsegmentos r 10error de acorde r 10decimalessegmentos r 50
0.1239.314e-2150
0.05324.815e-2271
0.01 (predeterminado)719.788e-32158
0.0051004.934e-33223
0.0021581.977e-33352
0.0012239.923e-43497
0.00053154.973e-44703

Casos extremos, también reales: segmentsFor(1000, 0.0001) = 2048 (el límite), segmentsFor(2, 5) = 8 (tolerancia ≥ radio), isTolerance(0.00005) = falso, isTolerance(10) = verdadero, decimalsForTolerance(0.0001) = 4.

Teselado de entidades de dibujo

tessellate(entity, tolerance) en tessellate.ts convierte cualquier entidad de dibujo en polilíneas dentro de la tolerancia de cuerda. Esa polilínea es lo que la capa CAM compensa y lo que representa la ventana gráfica. Una forma cerrada devuelve un anillo cuyo primer y último punto difieren; el segmento de cierre es implícito.
EntidadRegla
Líneasus dos puntos finales
Círculo, Arcorecuento de segmentos de arco a partir del radio, barrido y tolerancia, limitado a 65 536
Elipsepaso de parámetro uniforme h = √(8·tol / a), a el radio mayor, al menos 8 segmentos
Ranuralímite analítico de splinePolyline
Polilíneasegmentos abultados como arcos
Rectángulocuatro esquinas
Texto, Dimensiónsin esquema: lista vacía

Para una elipse con radios 20 y 10, ellipseSegmentCount da 100 segmentos en 0.01 mm y 32 en 0.1 mm.

Donde se encuentran las tolerancias

NúcleoParámetro de toleranciaPor defecto
Perfiles de croquissketchProfiles(boceto, tolerancia)0.01 mm
Primitivas de mallameshOf(sólido, tolerancia)0.1 mm
coincidencia CSGCsgOptions.tolerance1e-7 × extensión
Teselación B-repTessellateOptions.chordToldiagonal / 2000, en [0.001, 0.05]
Coincidencia booleana B-repBooleanOptions.tol1e-8 × tamaño, ≥ 1e-7
Acordes de hélicestepsPerTurn0.01 mm

La tolerancia de visualización no es tolerancia de mecanizado

La tolerancia de dibujo controla cómo se aproximan las curvas. La verificación CAM y el ajuste de arco con código G tienen sus propias tolerancias; consulte el núcleo CAM.

Solución de problemas

SíntomaCausaArreglar
los círculos parecen poligonalestolerancia 0.1 en un radio grandeelija un ajuste preestablecido más fino; los segmentos crecen con √r
ventana gráfica lenta en un dibujo grandetolerancia muy fina en muchas curvas0.01 es suficiente para mostrar; mantener valores más finos para la exportación
la longitud muestra demasiados decimaleslos decimales siguen la toleranciadecimalesParaTolerancia(0.01) = 2
un valor es rechazado como toleranciafuera de [0.0001, 10]usar un preajuste