Dokumentation
Toleranz und Tessellation
Wie eine Sehnenhöhentoleranz über die Segmentanzahl, die Anzeige von Dezimalstellen und die Kurventesselierung über die CAD-Kerne hinweg entscheidet.
Automatisch aus dem Englischen übersetzt. Englisches Original ansehen
Eine Toleranz, jede Kurve
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 Zeilen) enthält diese Regel; Der Renderer des Editors, der Elementkatalog des Assistenten, der Entity-Tessellator und die Tests nutzen es alle.
Konstanten
| Name | Wert | Bedeutung |
|---|---|---|
| TOLERANCE_PRESETS | 0.1, 0.05, 0.01, 0.005, 0.002, 0.001, 0.0005 | was die Benutzeroberfläche bietet, grob bis fein |
| DEFAULT_TOLERANCE | 0.01 | editor und Tessellations-Standard |
| MIN_TOLERANCE | 0.0001 | darunter ist „Tolerance“ falsch |
| MAX_TOLERANCE | 10 | darüber ist isTolerance falsch |
| MIN_CURVE_SEGMENTS | 8 | die wenigsten Kreissegmente |
| MAX_CURVE_SEGMENTS | 2048 | standardobergrenze von segmentFor |
| MAX_SEGMENTS (tessellate.ts) | 65 536 | hardcap pro Entität im Entitäts-Tessellator |
| MIN_TOLERANCE (tessellate.ts) | 1e-6 | boden, so dass eine Null-Toleranz keine unbegrenzten Zählungen erzeugen kann |
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 Voreinstellungen in Zahlen
Real segmentsFor, chordError und decimalsForTolerance ausgabe für jede Voreinstellung:
| Toleranz, mm | segmente r 10 | akkordfehler r 10 | dezimalzahlen | segmente r 50 |
|---|---|---|---|---|
| 0.1 | 23 | 9.314e-2 | 1 | 50 |
| 0.05 | 32 | 4.815e-2 | 2 | 71 |
| 0.01 (Standard) | 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 |
Randfälle, auch real: segmentsFor(1000, 0.0001) = 2048 (die Kappe), segmentsFor(2, 5) = 8 (Toleranz ≥ Radius), isTolerance(0.00005) = falsch, isTolerance(10) = wahr, decimalsForTolerance(0.0001) = 4.
Tesselisieren von Zeichnungselementen
tessellate(entity, tolerance) in tessellate.ts wandelt jedes Zeichnungselement innerhalb der Sehnentoleranz in Polylinien um. Diese Polylinie wird von der CAM-Ebene versetzt und vom Ansichtsfenster gerendert. Eine geschlossene Form gibt einen Ring zurück, dessen erster und letzter Punkt unterschiedlich sind; Das Schlusssegment ist implizit.
| Juristische Person | Regel |
|---|---|
| Linie | seine beiden Endpunkte |
| Kreis, Bogen | anzahl der Bogensegmente aus Radius, Sweep und Toleranz, begrenzt auf 65 536 |
| Ellipse | einheitlicher Parameterschritt h = √(8·tol / a), a der größere Radius, mindestens 8 Segmente |
| Spline | analytische Grenze von splinePolyline |
| Polylinie | gewölbte Segmente als Bögen |
| Rechteck | vier Ecken |
| Text, Dimension | keine Gliederung: leere Liste |
Für eine Ellipse mit den Radien 20 und 10, ellipseSegmentCount ergibt 100 Segmente bei 0.01 mm und 32 bei 0.1 mm.
Wo Toleranzen aufeinander treffen
| Kernel | Toleranzparameter | Standard |
|---|---|---|
| Skizzenprofile | sketchProfiles(Skizze, Toleranz) | 0.01 mm |
| Mesh-Primitive | meshOf(solid, Toleranz) | 0.1 mm |
| CSG-Zufall | CsgOptions.tolerance | 1e-7 × Ausdehnung |
| B-Rep-Tessellation | TessellateOptions.chordTol | diagonale / 2000, in [0.001, 0.05] |
| B-Rep Boolescher Zufall | BooleanOptions.tol | 1e-8 × Größe, ≥ 1e-7 |
| Helix-Akkorde | stepsPerTurn | 0.01 mm |
Die Anzeigetoleranz ist keine Bearbeitungstoleranz
Die Zeichnungstoleranz steuert, wie Kurven angenähert werden. Die CAM-Verifizierung und die G-Code-Bogenanpassung unterliegen ihren eigenen Toleranzen. siehe den CAM-Kernel.
Fehlerbehebung
| Symptom | Ursache | Fix |
|---|---|---|
| kreise sehen polygonal aus | toleranz 0.1 auf einem großen Radius | wählen Sie eine feinere Voreinstellung. Segmente wachsen mit √r |
| ansichtsfenster langsam bei einer großen Zeichnung | sehr feine Toleranz bei vielen Kurven | 0.01 reicht für die Anzeige; Behalten Sie feinere Werte für den Export bei |
| länge zeigt zu viele Dezimalstellen an | dezimalstellen folgen der Toleranz | decimalsForTolerance(0.01) = 2 |
| ein Wert wird als Toleranz abgelehnt | außerhalb [0.0001, 10] | verwenden Sie eine Voreinstellung |