文档
公差和镶嵌
一种弦高公差如何决定 CAD 内核中的段数、显示小数和曲线镶嵌。
从英文自动翻译。 查看英文原文
一种公差,每条曲线
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 | uI 提供什么,从粗到细 |
| DEFAULT_TOLERANCE | 0.01 | 编辑器和曲面细分默认值 |
| MIN_TOLERANCE | 0.0001 | 下面这个 isTolerance 为 false |
| MAX_TOLERANCE | 10 | 上面这个 isTolerance 为 false |
| MIN_CURVE_SEGMENTS | 8 | 圆的最少线段 |
| MAX_CURVE_SEGMENTS | 2048 | 段的默认上限For |
| MAX_SEGMENTS(tessellate.ts) | 65 536 | 实体镶嵌器中每个实体的硬上限 |
| MIN_TOLERANCE(tessellate.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 每个预设的输出:
| 公差,毫米 | 段 r 10 | 和弦错误 r 10 | 小数 | 段 r 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段 |
| 样条线 | 样条折线的解析界 |
| 折线 | 凸出的弧段 |
| 长方形 | 四个角 |
| 文字、尺寸 | 无大纲:空列表 |
对于半径为 20 和 10 的椭圆, ellipseSegmentCount 给出 100.0 mm 处的 01 段和 32.0 mm 处的 1 段。
公差满足的地方
| 核心 | 公差参数 | 默认 |
|---|---|---|
| 草图轮廓 | sketchProfiles(草图,公差) | 0.01 mm |
| 网格图元 | meshOf(实体,公差) | 0.1 mm |
| 南玻巧合 | CsgOptions.tolerance | 1e-7 × 范围 |
| B-rep 镶嵌 | TessellateOptions.chordTol | 对角线 / 2000,在 [0.001,0.05] |
| B-rep 布尔巧合 | BooleanOptions.tol | 1e-8 × 大小,≥ 1e-7 |
| 螺旋和弦 | stepsPerTurn | 0.01 mm |
显示公差不是加工公差
绘图公差控制曲线的近似方式。 CAM验证和G代码圆弧拟合有自己的公差;请参阅 CAM 内核。
故障排除
| 症状 | 原因 | 使固定 |
|---|---|---|
| 圆圈看起来是多边形的 | 大半径上的公差 0.1 | 选择更精细的预设;细分市场随着 √r 增长 |
| 大型绘图上的视口速度缓慢 | 许多曲线上的公差非常精细 | 0.01足以显示;保留更精细的出口值 |
| 长度显示太多小数 | 小数遵循公差 | decimalsForTolerance(0.01) = 2 |
| 某个值被视为容差而被拒绝 | 在 [0.0001, 10] 之外 | 使用预设 |