ドキュメント
公差とテッセレーション
1 つの弦の高さの公差によって、CAD カーネル全体でのセグメント数、表示小数点および曲線テッセレーションがどのように決定されるか。
英語から自動翻訳されています。 英語の原文を見る
1 つの公差、すべての曲線
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 | これより下の許容値は false です |
| MAX_TOLERANCE | 10 | これを超えると許容値は false になります |
| MIN_CURVE_SEGMENTS | 8 | 円の最小のセグメント |
| MAX_CURVE_SEGMENTS | 2048 | セグメントのデフォルトの上限 |
| 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 各プリセットの出力:
| 公差、mm | セグメント 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 レイヤーがオフセットするものであり、ビューポートがレンダリングするものです。閉じた形状は、最初と最後の点が異なるリングを返します。終了セグメントは暗黙的です。
| 実在物 | ルール |
|---|---|
| ライン | その2つの終点 |
| 円、円弧 | 半径、スイープ、許容値からの円弧セグメント数、上限は 65 536 |
| 楕円 | 均一パラメータ ステップ h = √(8·tol / a)、半径が大きいほど、少なくとも 8 個のセグメント |
| スプライン | スプラインポリラインの解析境界 |
| ポリライン | 円弧としての膨らんだセグメント |
| 矩形 | 四隅 |
| テキスト、寸法 | アウトラインなし: 空のリスト |
半径が 20 と 10 の楕円の場合、 ellipseSegmentCount 100.0 mm で 01 セグメント、32.0 mm で 1 を与えます。
公差が一致する場所
| カーネル | 公差パラメータ | デフォルト |
|---|---|---|
| スケッチプロファイル | スケッチプロファイル(スケッチ、公差) | 0.01 mm |
| メッシュプリミティブ | メッシュの(ソリッド、許容値) | 0.1 mm |
| CSGの一致 | 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 で十分です。エクスポート用に細かい値を保持する |
| 長さに小数点以下が多すぎます | 小数は公差に従います | 10 進数ForTolerance(0.01) = 2 |
| 値が許容誤差として拒否される | [0.0001、10] の外 | プリセットを使用する |