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.
Constantes
| Nombre | Valor | Significado |
|---|---|---|
| TOLERANCE_PRESETS | 0.1, 0.05, 0.01, 0.005, 0.002, 0.001, 0.0005 | lo que ofrece la interfaz de usuario, de grueso a fino |
| DEFAULT_TOLERANCE | 0.01 | editor y teselación predeterminados |
| MIN_TOLERANCE | 0.0001 | debajo de esto está la tolerancia es falsa |
| MAX_TOLERANCE | 10 | arriba de esto está la tolerancia es falsa |
| MIN_CURVE_SEGMENTS | 8 | el menor número de segmentos de un círculo |
| MAX_CURVE_SEGMENTS | 2048 | límite predeterminado de segmentos para |
| MAX_SEGMENTS (teselado.ts) | 65 536 | límite máximo por entidad en el teselador de entidades |
| MIN_TOLERANCE (tesselado.ts) | 1e-6 | piso, por lo que una tolerancia cero no puede producir recuentos ilimitados |
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, mm | segmentos r 10 | error de acorde r 10 | decimales | segmentos r 50 |
|---|---|---|---|---|
| 0.1 | 23 | 9.314e-2 | 1 | 50 |
| 0.05 | 32 | 4.815e-2 | 2 | 71 |
| 0.01 (predeterminado) | 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, 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.
| Entidad | Regla |
|---|---|
| Línea | sus dos puntos finales |
| Círculo, Arco | recuento de segmentos de arco a partir del radio, barrido y tolerancia, limitado a 65 536 |
| Elipse | paso de parámetro uniforme h = √(8·tol / a), a el radio mayor, al menos 8 segmentos |
| Ranura | límite analítico de splinePolyline |
| Polilínea | segmentos abultados como arcos |
| Rectángulo | cuatro esquinas |
| Texto, Dimensión | sin 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úcleo | Parámetro de tolerancia | Por defecto |
|---|---|---|
| Perfiles de croquis | sketchProfiles(boceto, tolerancia) | 0.01 mm |
| Primitivas de malla | meshOf(sólido, tolerancia) | 0.1 mm |
| coincidencia CSG | CsgOptions.tolerance | 1e-7 × extensión |
| Teselación B-rep | TessellateOptions.chordTol | diagonal / 2000, en [0.001, 0.05] |
| Coincidencia booleana B-rep | BooleanOptions.tol | 1e-8 × tamaño, ≥ 1e-7 |
| Acordes de hélice | stepsPerTurn | 0.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íntoma | Causa | Arreglar |
|---|---|---|
| los círculos parecen poligonales | tolerancia 0.1 en un radio grande | elija un ajuste preestablecido más fino; los segmentos crecen con √r |
| ventana gráfica lenta en un dibujo grande | tolerancia muy fina en muchas curvas | 0.01 es suficiente para mostrar; mantener valores más finos para la exportación |
| la longitud muestra demasiados decimales | los decimales siguen la tolerancia | decimalesParaTolerancia(0.01) = 2 |
| un valor es rechazado como tolerancia | fuera de [0.0001, 10] | usar un preajuste |