コンテンツへスキップ
CADCAMFUN
ドキュメント

ドキュメント

公差とテッセレーション

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 行) にはそのルールが保持されます。エディターのレンダラー、アシスタントの要素カタログ、エンティティ テッセレーター、およびテストはすべてこれを使用します。

3 つの公差での Ø20 円 ドラッグして周回します · スクロールしてズーム · 右ドラッグしてパンします
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.

定数

名前価値意味
TOLERANCE_PRESETS0.1, 0.05, 0.01, 0.005, 0.002, 0.001, 0.0005uI が提供するもの (粗いものから細かいものまで)
DEFAULT_TOLERANCE0.01エディターとテッセレーションのデフォルト
MIN_TOLERANCE0.0001これより下の許容値は false です
MAX_TOLERANCE10これを超えると許容値は false になります
MIN_CURVE_SEGMENTS8円の最小のセグメント
MAX_CURVE_SEGMENTS2048セグメントのデフォルトの上限
MAX_SEGMENTS (tessellate.ts)65 536エンティティ テッセレータ内のエンティティごとのハード キャップ
MIN_TOLERANCE (tessellate.ts)1e-6したがって、ゼロ許容値は無制限のカウントを生成できません
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

数字で見るプリセット

本物 segmentsFor, chordError そして decimalsForTolerance 各プリセットの出力:

公差、mmセグメント r 10コードエラーr 10小数セグメント r 50
0.1239.314e-2150
0.05324.815e-2271
0.01 (デフォルト)719.788e-32158
0.0051004.934e-33223
0.0021581.977e-33352
0.0012239.923e-43497
0.00053154.973e-44703

エッジケースも現実です: 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.tolerance1e-7 × 範囲
B-rep テッセレーションTessellateOptions.chordTol対角線 / 2000、[0.001、0.05] 内)
B-rep ブール値の一致BooleanOptions.tol1e-8 × サイズ、≥ 1e-7
ヘリックスコードstepsPerTurn0.01 mm

表示公差は加工公差ではありません

描画許容差は、曲線をどのように近似するかを制御します。 CAM 検証と G コード アーク フィッティングには独自の公差があります。 CAM カーネルを参照してください。

トラブルシューティング

症状原因修理
円が多角形に見える大きな半径の許容値 0.1より細かいプリセットを選択します。セグメントは √r で増加します
大きな図面ではビューポートが遅い多くの曲線に対する非常に細かい許容差表示には 0.01 で十分です。エクスポート用に細かい値を保持する
長さに小数点以下が多すぎます小数は公差に従います10 進数ForTolerance(0.01) = 2
値が許容誤差として拒否される[0.0001、10] の外プリセットを使用する