Zum Inhalt springen
CADCAMFUN
Doku

Dokumentation

CAD-Geometrie

Zeichnungselemente, eingeschränkte Skizzen, parametrische Historien, Netze und exakte Volumenkörper in einem gemeinsamen Geometriekern.

Automatisch aus dem Englischen übersetzt. Englisches Original ansehen

Zeichnungselemente

@cadcamfun/core exportiert CAD-Funktionen sowohl direkt als auch unter cad namensraum. Schema-first 2D-Entitäten verwenden eine _tag diskriminator: Linie, Kreis, Bogen, Polylinie, Rechteck, Ellipse, Spline, Text, Bemaßung, Schraffur und Block. Jede Entität verfügt über eine stabile Kennung, Schicht, Sichtbarkeit und einen Sperrstatus. Die Auswahl gehört zum Editorstatus.

Die Elementgeometrie verwendet Millimeter und Bogenmaß. Bogenwinkel werden auf eine volle Drehung normiert und gleiche Start-/Endwinkel stellen einen vollständigen Kreis dar. Eine lokale Entitätstransformation wendet Skalierung, Drehung und dann Verschiebung an. Affine2D unterstützt zusammengesetzte Transformationen, die Scherung beinhalten können. The scene-element and parametric-history adapters have their own documented angular fields, including degree-valued placement and feature controls.

entitySchemaOf(tag) gibt das Schema für einen Entitätstyp zurück. Dekodieren Sie importierte Daten, bevor Sie Geometriefunktionen aufrufen. Grenzen, Tessellation, Schnittpunkte, Versätze und Fangen sind separate Vorgänge; Das Rendern einer mosaikierten Kurve ersetzt nicht ihre analytische Einheit.

Eingeschränkte Skizzen

Das Skizzenmodell enthält benannte Punkte, Linien zwischen Punkten, Kreise mit Mittelpunkt und Radius sowie Bögen gegen den Uhrzeigersinn. Gemeinsam genutzte Punktbezeichner drücken gemeinsam genutzte Endpunkte aus. Zu den Einschränkungen gehören Koinzidenz, horizontale und vertikale Ausrichtung, Abstände, Längen, parallele und senkrechte Linien, gleiche Längen und Radien, Tangentialität, Symmetrie und geometrische Inzidenz.

Der numerische Löser minimiert Beschränkungsreste mit einer Levenberg-Marquardt-Iteration und einem Jacobi-Algorithmus mit zentraler Differenz. Es meldet Freiheitsgrade, freie Punkte, redundante Gleichungen und widersprüchliche Einschränkungen. Ein Ergebnis kann vollständig eingeschränkt, unterbeschränkt, überbeschränkt, widersprüchlich oder fehlgeschlagen sein. Eine unterbeschränkte Lösung kann jede Dimension erfüllen und gleichzeitig Bewegung ermöglichen; Anrufer müssen diese Unterscheidung wahren.

Skizzenbeschränkungen erhalten Zahlen. Parametrische Historien lösen Parameterausdrücke auf, bevor sie den Solver aufrufen. Einschränkungen für den Skizzenwinkel sind Bogenmaß; Verwenden Sie beim Konvertieren einer vom Benutzer eingegebenen Bemaßung die eigene Eingabekonvention des Features.

Parametrische Geschichten

Ein parametrisches Teil speichert seine Parameter und den geordneten Funktionsverlauf. Bei der Neukonstruktion werden Ausdrücke und Features der Reihe nach ausgewertet, sodass ein Feature zuvor erstellte Skizzen, Ebenen, Körper oder Werkzeuge referenzieren kann. Der Kern umfasst Extrusionen, Drehungen, Lofts und Sweeps, Boolesche Werte, Löcher, Muster, Flächenbearbeitungen, Text, Gewinde, Blechmerkmale und Paarungssteuerungen. Die Verfügbarkeit einer exakten Darstellung hängt von der jeweiligen Merkmalssequenz ab.

rebuild erzeugt Netzkörper und Feature-Probleme. rebuildExact spielt den Verlauf über den Boundary-Representation-Kernel ab und zeichnet auf, warum einem Körper eine exakte Darstellung fehlt. Behalten Sie den Verlauf als bearbeitbare Quelle bei; generierte Körper sind abgeleitete Ausgaben. Eine fehlgeschlagene oder nicht unterstützte Funktion muss im Problemdatensatz sichtbar bleiben.

Lesen Sie das Wiederholungsergebnis

Eine Netzausgabe kann vorhanden sein, wenn die exakte Wiedergabe ein Feature nicht darstellen kann. Überprüfen Sie die Körper- und Ausgabedatensätze, bevor Sie Aussagen über die genaue Geometrie, das Volumen oder die Exporttreue machen.

Netzgeometrie und -platzierung

Netze verwenden indizierte Dreiecksgeometrie. Die CAD-Ebene bietet primitive Konstruktion, boolesche Netzoperationen, Sweep- und Loft-Hilfsfunktionen, Topologie- und normale Dienstprogramme sowie Geometriebereinigung. Der CAM-Modelladapter wandelt unterstützte Szenenelemente in Netze um, einschließlich verschachtelter Komponenten, sodass Analyse und Werkzeugweggenerierung dieselbe platzierte Geometrie verwenden können.

Elementposition, Drehung, Skalierung und Verschiebung wirken sich auf das resultierende Teil aus. Die genaue Platzierung der Szene spiegelt die Transformation des Ansichtsfensters um die Mitte des Begrenzungsrahmens wider. Eine ungleichmäßige Skalierung kann dazu führen, dass der exakte Modellpfad eines Elements verloren geht. Die Szenenkonvertierung meldet einen Grund und verwendet beim Export möglicherweise eine facettierte Darstellung.

Exakte Grenzdarstellung

cad.brep macht analytische und NURBS-Geometrie mit Flächen-, Schleifen-, Kantennutzungs-, Kanten- und Scheitelpunkttopologie verfügbar. Seine Module umfassen Grundelemente, Sweeps, Lofts, Boolesche Werte, Flächenbearbeitungen, Mischungen, Nähen, Tessellation, Klassifizierung, Validierung, Masseneigenschaften sowie STEP-Lesen und -Schreiben. history-brep.ts und scene-step.ts verbinden Sie diesen Kernel mit parametrischen Teilen und platzierten Szenenelementen.

POST /api/cad/exact/analyze gibt Gültigkeitsprobleme pro Teil, Volumen, Fläche, Schwerpunkt, Grenzen, Topologieanzahlen, Oberflächenanzahlen, erkannte Löcher und Bearbeitungsklassifizierung zurück. Außerdem werden übersprungene Elemente mit Gründen und Gesamtsummen zurückgegeben. Ein prismatisches Bearbeitungsergebnis meldet Umrisse, Löcher, Taschen und obere/untere Ebenen; Nicht unterstützte Teile haben einen Grund.

POST /api/cad/exact/assembly meldet Überschneidungen, erwartete Überlappungen, sich berührende und unbestimmte Paare, Stücklistenelemente, Verbindungen und Verbindungspläne. Eine unbestimmte Geometrie ist ein gemeldetes Ergebnis und kein Beweis für die Freigabe. Diese Analyserouten berechnen Ergebnisse, ohne die Zeichnung zu verändern.

Import und Export

Der Kern verfügt über DXF- und Zeichnungsimporthilfen, einen prismatischen STEP-Interpretationspfad und einen genauen STEP B-Rep-Reader. Der prismatische Pfad zeigt eine Grundfläche und Extrusionshöhe für geeignete Platten, Halterungen und Flansche an; es berichtet über Merkmale, die ein Prisma nicht beschreiben kann. Wählen Sie den genauen Leser aus, wenn eine genau unterstützte STEP-Topologie benötigt wird, und überprüfen Sie die Diagnose von beiden Pfaden aus.

sceneToStep schreibt eine Szene als STEP AP214. Exakt unterstützte Volumenkörper behalten ihre exakte Geometrie bei; Reine Netzkörper können als facettierte Körper ausgegeben werden. Nicht-solide Elemente werden mit Begründung übersprungen. Der faceted die Option steuert diesen Fallback. Eine Antwort ohne step enthält keinen exportierbaren Feststoff.

Die exakten HTTP-Routen akzeptieren beides elements oder drawingId; explizite Elemente haben Vorrang. Snapshot-Arrays erlauben 1–2,000 Elemente und eine optionale Auswahl von bis zu 200 Bezeichnern. Bei einer gespeicherten Zeichnung liest der Sidecar die Szene gemäß Zeichnungszugriffsregeln. Eine fehlende Quelle, eine leere Zeichnung, eine unbekannte Zeichnung oder eine abgelehnte Zeichnung führt zum entsprechenden Anforderungs- oder Zugriffsfehler.

Technische Zeichnungen

Der drawing der Namespace bietet Projektionen, Schnitte, Abmessungen, Blattzusammensetzung und SVG-Ausgabe von 3D-Modellen. Dies ist eine separate Darstellung der bearbeitbaren 2D-Elementzeichnung und eines Bearbeitungsprogramms. Projektions- und Schnittgeometrie sollten nach Modelländerungen neu generiert werden; Ein Blattexport erfasst den Modellstatus, der zum Erstellen verwendet wurde.

Wo kann die Geometrie erweitert werden?

Beginnen Sie mit packages/core/src/cad/index.ts für die öffentliche CAD-Oberfläche. Daneben leben Entitätsoperationen entities.ts; das Lösen von Einschränkungen ist in sketch.ts; mesh-Geschichte ist da history.ts; die genaue Wiederholung ist da history-brep.ts; genaue Topologie und Austausch finden Sie weiter unten brep/. packages/core/src/drawing/ besitzt Blattausgabe. Zu den unterstützenden Modulen im selben Ordner gehören: expr.ts (parameterausdrücke wie width / 2 + 3, in Abhängigkeitsreihenfolge aufgelöst, wobei die Zyklen als Fehler gemeldet werden), tolerance.ts (akkord-Sagitta-Segment zählt für Kurven), gear.ts (ISO 53 Evolventen-Stirnrad-Umrisse), thread.ts, sheet-metal.ts, fasteners.ts, recipes.ts (generatoren, die vollständige, vollständig eingeschränkte Funktionsverläufe ausgeben), dfm.ts (design-for-Manufacture-Ergebnisse mit gemessenen und erforderlichen Werten) und dxf.ts.

Geometriefunktionen arbeiten mit Werten, ohne den Anwendungsspeicher zu öffnen. Sidecar-Dienste kümmern sich um Zugriff und Persistenz, und Desktop-Adapter kümmern sich um Interaktion und Rendering. Halten Sie Konvertierungen an den Grenzen explizit, damit ein Anzeigenetz, ein exakter Volumenkörper und ein gespeicherter Verlauf ihre eindeutige Bedeutung behalten.

Erstellen, validieren und exportieren Sie einen Volumenkörper

Dieses vollständige Kernbeispiel konstruiert ein 40 × 25 × 8 mm-Feld mit einer Ecke am Weltursprung, überprüft seine Topologie, misst sie und exportiert STEP-Text. Es erfordert nur das Workspace-Kernpaket und führt keine Anwendungsschreibvorgänge durch.

Ein exaktes Feld und sein STEP-Text
import { cad } from "@cadcamfun/core"

const solid = cad.brep.makeBox(40, 25, 8)
const report = cad.brep.validateBrep(solid)
if (!report.valid) throw new Error(JSON.stringify(report.issues))

const mass = cad.brep.massProperties(solid)
console.log(mass.volume.toFixed(3)) // "8000.000" cubic millimetres
console.log(mass.centroid) // approximately { x: 20, y: 12.5, z: 4 }
const step = cad.brep.writeStepBreps([{ name: "Bracket blank", brep: solid }], {
  author: "Workshop",
  timestamp: "2026-01-01T00:00:00.000Z"
})
console.log(step.startsWith("ISO-10303-21;")) // true

Der explizite Zeitstempel macht wiederholte Austauschausgaben reproduzierbar. Ohne sie verwendet STEP-Schreiben die aktuelle Zeit. massProperties gibt außerdem Fläche, Fläche pro Fläche und einen Trägheitstensor um den Schwerpunkt bei Einheitsdichte zurück; Das Volumen ist mm³ und die Fläche ist mm². Konvertieren Sie die Dichte explizit, wenn Sie eine physikalische Masse berechnen.

Quelle: packages/core/src/cad/brep/primitives.ts, mass.ts, validate.ts, und step.ts.

Validierungs- und Konvertierungsoptionen

validateBrep kehrt zurück valid, aufzeichnungen ausstellen, manifoldSolidund optionale Gattung/Volumen. manifoldSolid bedeutet geschlossene Schalen, bei denen jede Kante doppelt in entgegengesetzter Richtung verwendet wird. Die standardmäßige geometrische Abstandstoleranz skaliert auf 10⁻⁵ der Modellgröße mit einem Boden von 10⁻⁶ mm. Ein Anrufer kann liefern tol, überspringen Sie die Volumen-/Ausrichtungsprüfung mit skipVolume, oder verwenden Sie eine grobe Tessellation zur Orientierung mit coarseVolume.

Die APIs für die exakte Analyse machining flag ist standardmäßig true. Export von STEP-Szenen faceted der Standardwert für Fallback ist „true“ und die Planung von Baugruppenbefestigungen washers die Option ist standardmäßig auf „true“ eingestellt. Auswahl-IDs beziehen sich auf Szenenelemente, einschließlich untergeordneter Komponenten, die durch den Szenendurchlauf aufgelöst werden. Diese HTTP-Optionen wirken sich auf die Analyse/den Export aus, nicht auf die gespeicherte Zeichnung.

Der Szenenexport gibt Teile pro Teil zurück exact, faces, validund eine optionale Notiz. Überprüfen Sie die Felder daneben skipped: ein gültiger facettierter Körper kann exportiert werden, ohne dass analytische Flächen erhalten bleiben.

Quelle: packages/core/src/cad/brep/validate.ts, scene-analysis.ts, scene-step.ts, assembly-analysis.ts, und packages/api/src/cad-exact.ts.

Reparieren Sie einen fehlgeschlagenen Neuaufbau oder Export

FindenNächste Inspektion
Die Skizze bleibt unterbeschränktLesen Sie Freiheitsgrade und Freipunkt-IDs. Fügen Sie die fehlenden Positions-/Ausrichtungsbeschränkungen hinzu; Eine bemaßte Linie mit nur einem festen Endpunkt kann sich dennoch drehen.
Konflikt zwischen SkizzenbeschränkungenVerwenden Sie benannte Konflikt-IDs und das Residuum, um inkompatible Dimensionen zu finden. Das Wiederholen einer kompatiblen Gleichung ist Redundanz; Zwei unterschiedliche erforderliche Längen sind ein Konflikt.
Die Verlaufsfunktion verweist auf einen unbekannten Körper oder ein unbekanntes FlugzeugÜberprüfen Sie die Reihenfolge und Kennungen der Features. Abhängigkeiten müssen zu einem früheren Zeitpunkt in der Wiedergabe vorhanden sein, und die Unterdrückung/Löschung kann spätere Verweise ungültig machen.
Genaues Modell nach der Skalierung nicht verfügbarÜberprüfen Sie die ungleichmäßige Skala und den gemeldeten Grund des Elements. Verwenden Sie die unterstützte einheitliche Platzierung oder akzeptieren und kennzeichnen Sie einen Facettenexport.
Das STEP-Ergebnis enthält übersprungene Elemente oder keinen TextÜberprüfen Sie, ob die Auswahl Volumenkörper enthält und ob Facetten-Fallback aktiviert ist. Leere oder 2Nur-D-Auswahlen können keine solide STEP-Datei erzeugen.

Primitive Dimensionen müssen positiv und endlich sein. Direkte Geometriefunktionen können Bereichsfehler für ungültige Bemaßungen auslösen; Transport- und Serviceschichten müssen diese Fehler in ihre eigenen typisierten Ergebnisse umwandeln. Wiederherstellungsprobleme werden mit Feature-IDs verknüpft, sodass ein Fehler an der Quelle behoben werden kann, anstatt durch die Beibehaltung eines früheren Netzes verdeckt zu werden.

Quelle: packages/core/src/cad/sketch.test.ts, history.ts, scene-step.ts, und apps/sidecar/test/cad-exact.test.ts.

Lösen Sie eine Skizze Schritt für Schritt

Eine Skizze besteht aus einfachen Daten: einem Array von entities (punkte, Linien, Kreise, Bögen) und ein Array von constraints. Linien, Kreise und Bögen verweisen über ihre Kennung auf Punkte, sodass zwei Linien, die einen Endpunkt teilen, dieselbe Punkt-ID haben. Der Solver verschiebt nur Punktkoordinaten und Kreisradien; Es werden niemals Entitäten hinzugefügt oder entfernt.

p1 (fest)p2p3p4 l1 · horizontall2 · vertikal l3 · horizontall4 · vertikal breite = 40 tiefe = 25
Die in den Beispielen verwendete Skizze: vier Punkte, vier Linien, ein fester Punkt, vier Ausrichtungsbeschränkungen und zwei Längenbemaßungen. Jeder Freiheitsgrad wird entfernt, so meldet der Löser fully-constrained mit dof = 0.
Lösen Sie ein vollständig eingeschränktes Rechteck
import { cad } from "@cadcamfun/core"

const sketch = {
  entities: [
    { id: "p1", kind: "point", x: 0, y: 0 },
    { id: "p2", kind: "point", x: 38, y: 1 },   // rough positions are fine:
    { id: "p3", kind: "point", x: 39, y: 26 },  // the solver moves them
    { id: "p4", kind: "point", x: 1, y: 24 },
    { id: "l1", kind: "line", p1: "p1", p2: "p2" },
    { id: "l2", kind: "line", p1: "p2", p2: "p3" },
    { id: "l3", kind: "line", p1: "p3", p2: "p4" },
    { id: "l4", kind: "line", p1: "p4", p2: "p1" },
  ],
  constraints: [
    { type: "fixed", point: "p1", x: 0, y: 0 },
    { type: "horizontal", line: "l1" },
    { type: "horizontal", line: "l3" },
    { type: "vertical", line: "l2" },
    { type: "vertical", line: "l4" },
    { id: "width", type: "length", line: "l1", value: 40 },
    { id: "depth", type: "length", line: "l2", value: 25 },
  ],
}

const result = cad.solveSketch(sketch)
result.status     // "fully-constrained"
result.dof        // 0
result.iterations // 3
result.residual   // < 1e-9
// points now at (0,0) (40,0) (40,25) (0,25)

Führen Sie dieselbe Skizze ohne aus fixed einschränkung und das Ergebnis ändert sich in under-constrained mit dof = 2 und free = ["p1", "p2", "p3", "p4"]. Das Rechteck hat immer noch die richtige Größe, kann aber in X und Y verschoben werden. Fügen Sie eine dritte Länge hinzu, { id: "w2", type: "length", line: "l3", value: 50 }, und der Status wird conflicting. conflicts listet dann die genannten Einschränkungen auf, die nicht gemeinsam erfüllt werden können, die schlechtesten zuerst (z. B w2 und width). Nennen Sie die Einschränkungen, die Ihnen am Herzen liegen id; unbenannte Einschränkungen werden mit einer generierten Bezeichnung gemeldet, z. B vertical#4.

OptionStandardBedeutung
maxIterations200Obergrenze für Levenberg-Marquardt-Iterationen, bevor die Lösung als angegeben wird failed.
tolerance1e-9Der größte absolute Residuum wird als gelöst akzeptiert.
ErgebnisfeldInhalt
sketchDie Eingabeskizze mit gelösten Koordinaten und Radien.
statusfully-constrained, under-constrained, over-constrained, conflicting, oder failed.
dofVerbleibende Freiheitsgrade.
freePunkt-IDs, die sich noch bewegen können, und Kreis-IDs, deren Radius sich noch ändern kann.
conflictsEinschränkungs-IDs, die nicht erfüllt werden konnten, das Schlimmste zuerst.
redundantAnzahl redundanter Gleichungen (Rangdefizit).
iterations, residual, messageSolver-Diagnose.

Fehlerhafte Eingabewürfe

Eine Skizze, die sich auf einen unbekannten Punkt oder ein unbekanntes Objekt bezieht, ist fehlerhaft und nicht unlösbar solveSketch wirft ein SketchError. Validieren Sie importierte Skizzen, bevor Sie sie in einer Schleife lösen.

Einschränkungsreferenz

Jede Einschränkung ist ein Objekt mit a type und ein optionales id. Längen sind Millimeter und Winkel sind Bogenmaße. In einer parametrischen Geschichte, beliebig value kann auch eine Parameterausdruckszeichenfolge sein.

TypFelderEffect
fixedpoint, fakultativ x, yFixiert einen Punkt, optional an explizite Koordinaten.
coincidenta, bZwei Punkte nehmen die gleiche Position ein.
horizontal / verticallineEine Linie ist parallel zu X / Y.
horizontalPoints / verticalPointsa, bZwei Punkte teilen sich eine Y/X-Koordinate.
distancea, b, valueEuklidischer Abstand zwischen zwei Punkten.
distanceX / distanceYa, b, valueSigniert horizontaler/vertikaler Versatz.
lengthline, valueLänge einer Zeile.
parallel / perpendiculara, bBeziehung zwischen zwei Linien.
equalLength / equalRadiusa, bGleiche Linienlängen / Kreis- oder Bogenradien.
radius / diametercircle, valueGröße eines Kreises oder Bogens.
anglea, b, valueWinkel gegen den Uhrzeigersinn von der Linie a linieren b, im Bogenmaß.
pointOnLine / pointOnCirclepoint und line / circleInzidenz.
midpointpoint, lineEin Punkt liegt in der Mitte einer Linie.
symmetrica, b, lineZwei Punkte spiegeln sich um eine Linie.
tangentLineCircleline, circleEine Linie berührt einen Kreis oder Bogen.
tangentCirclesa, b, fakultativ internalCircles touch externally (distance = r1 + r2) or internally (distance = |r1 − r2|).
concentrica, bGemeinsamer Mittelpunkt von Kreisen oder Bögen.

Bögen laufen gegen den Uhrzeigersinn ab start bis end um center. Der Radius eines Kreises ist eine Lösungsvariable, also ein Kreis ohne a radius, diameter, equalRadius, oder Tangentialitätsbeschränkung erscheint in free.

Erstellen Sie ein parametrisches Teil

A History ist eine Parametertabelle plus eine geordnete Feature-Liste. Parameter sind Zahlen oder Ausdrücke anderer Parameter. Sie werden in Abhängigkeitsreihenfolge aufgelöst, und ein Zyklus ist ein Fehler, der die Schleife benennt. Features verweisen namentlich auf Parameter in jedem Dimensionsfeld.

Parametrische Platte: 40 × 25 × 8 mm mit einem Ø5 Durchgangsloch Zum Orbit ziehen · zum Zoomen scrollen · zum Schwenken mit der rechten Maustaste ziehen
Result of the history example below: the sketch is solved, extruded by thick = 8 mm, and the hole (diameter = width / 8 = 5 mm) is subtracted. Exact replay of this history has a volume of 7,842.92 mm³ (8,000 − π·2.5²·8).
Platte mit parametrischem Loch
import { cad } from "@cadcamfun/core"

const history = {
  parameters: { width: 40, depth: 25, thick: 8, hole: "width / 8" },
  features: [
    // the rectangle sketch from the previous section, with dimension
    // values replaced by parameter names: value: "width", value: "depth"
    { id: "s1", type: "sketch", plane: "XY", sketch: rectangleSketch },
    { id: "e1", type: "extrude", sketch: "s1", depth: "thick", operation: "new" },
    { id: "h1", type: "hole", plane: "XY", offset: "thick",
      at: [20, 12.5], diameter: "hole", depth: "thick" },
  ],
}

const mesh = cad.rebuild(history)
mesh.parameters // { width: 40, depth: 25, thick: 8, hole: 5 }
mesh.bodies     // one mesh body, id "e1"
mesh.issues     // []

const exact = cad.rebuildExact(history, mesh)
exact.bodies[0].brep        // present: the history has an exact representation
exact.warnings              // []
cad.brep.massProperties(exact.bodies[0].brep).volume // 7842.92… mm³
cad.brep.validateBrep(exact.bodies[0].brep).valid    // true
rebuild kehrt zurück bodies (dreiecksnetze, die durch das Feature, das sie erstellt hat, verschlüsselt sind), werden aufgelöst parameters, die Ebene, den Rahmen und das Lösungsergebnis jeder Skizze, die Abwicklungsmuster von Blechelementen und issues. Eine Funktion, die nicht erstellt werden kann, wird gemeldet issues mit seiner Feature-ID und seinem Schweregrad und wird übersprungen. Funktionen, die nicht davon abhängen, werden weiterhin erstellt. rebuildExact(history, given?, options?) kann einen bereits vorhandenen Netzneuaufbau wiederverwenden und akzeptiert einen budgetMs zeitbudget.

Basisebenen sind rechtshändig: XY hat u = X, v = Y, normal +Z; YZ hat u = Y, v = Z, normal +X; ZX hat u = Z, v = X, normal +Y. Eine Skizze, ein Loch oder ein Text kann auch auf der ID eines früheren platziert werden plane funktion, mit einem offset entlang der Normalen.

BesonderheitSchlüsselfelder und Standardwerte
sketchplane, fakultativ offset, sketch (entitäten, Einschränkungen, optionale Parameter shapes: rechteck, Kreis, Polygon, Ellipse, Langloch, Polylinie).
extrudesketch, depth, direction up/down/symmetric, operation new/union/subtract/intersect, fakultativ targets (standard: jeder Körper bisher), edge fase/Verrundung der Stirnflächen (ends standard both), corner behandlung und taper tiefgang in Grad. Schleifen innerhalb von Schleifen sind Löcher (gerade-ungerade).
revolvesketch, axis (x, yoder eine Skizzenlinie), angle in Grad (Standard 360), operation.
holeplane, offset, at [u, v], diameter, depth; kind simple (standard), counterbore, oder countersink mit headDiameter, headDepth, und angle (standard: 90°). Optionale Kosmetik thread hinweis (z.B M4), tolerance, und ISO 286 fit wie zum Beispiel H7. Ein kosmetischer Faden verändert die Geometrie nicht.
pattern, mirrorKopien des Werkzeugs einer früheren Funktion, die auf die gleiche Weise angewendet werden.
sweep, loft, coilProfile entlang eines Pfades, zwischen Abschnitten oder entlang einer Helix.
shell, fillet, draft, pushpullFlächen- und Kantenbearbeitungen.
move, scale, split, combineKörperoperationen.
rib, sheet, thread, textRippen, Blechkörper mit flachen Mustern, modellierte Fäden und Text in Strichschrift.
plane, primitive, mateKonstruktionsebenen, Grundkörper und Zusammenfügung von Baugruppen.

Bearbeiten Sie den Verlauf, nicht den Text

Ändern Sie einen Parameter und erstellen Sie ihn neu: Jede Skizze, die ihn verwendet, wird erneut aufgelöst, und alle Volumenkörper und Booleschen Werte werden danach erneut erstellt. Das direkte Bearbeiten eines generierten Netzes geht beim nächsten Neuaufbau verloren.

Exakte Grundelemente und Platzierung

Der B-Rep-Kernel erstellt direkt analytische Volumenkörper. Jeder Konstruktor nimmt eine optionale Platzierung an Frame; ohne eins wird der Körper im Weltrahmen platziert.

KonstrukteurArgumenteWeltplatzierung
makeBox(dx, dy, dz, placement?)Kantenlängen in mmMinimale Ecke am Ursprung.
makeCylinder(radius, height, placement?)Radius und HöheEin Kegel mit gleichen Radien; Achse entlang Z.
makeCone(r1, r2, height, placement?)Basis- und OberradienAchse entlang Z.
makeSphere(radius, placement?)RadiusIm Mittelpunkt steht der Ursprung.
makeTorus(major, minor, placement?)Ring- und RohrradienAchse entlang Z.
Exakte Grundelemente Zum Orbit ziehen · zum Zoomen scrollen · zum Schwenken mit der rechten Maustaste ziehen
makeBox(40, 25, 8) with its corner at the origin, next to a cylinder of radius 6 and height 20 placed beside it. The axes show +X (red), +Y (green), and +Z (blue).

Dimensionen müssen positiv und endlich sein; Andernfalls geben die Konstruktoren einen Bereichsfehler aus. Laufen validateBrep auf alles, was Sie aus Booleschen Werten, Sweeps oder Importen erstellen, bevor Sie Volumen- oder Exportergebnissen vertrauen. Ein Primitiv direkt von einem Konstruktor ist konstruktionsbedingt gültig.

Modellierungspraktiken, die zuverlässig wiederherstellen

  • Fixieren Sie einen Punkt und beschränken Sie die Ausrichtung, bevor Sie Bemaßungen hinzufügen. Eine unterbeschränkte Skizze kann alle Dimensionen erfüllen und sich beim nächsten Neuaufbau trotzdem verschieben.
  • Geben Sie jeder benutzerorientierten Dimension ein id ein Konfliktbericht nennt also etwas, das einer Person bekannt ist.
  • Parameter und Ausdrücke bevorzugen ("width / 2 + 3", "max(a, b) * 2") über wiederholte Literale; Eine Bearbeitung steuert dann den gesamten Teil.
  • Referenzieren Sie frühere Features erst dann anhand ihrer ID, wenn sie in der Liste vorhanden sind. Durch die Neuordnung eines Verlaufs kann aus einer gültigen Referenz ein Problem werden.
  • Verwenden targets auf Booleschen Werten, wenn ein Teil mehrere Körper hat. Standardmäßig wird der Vorgang auf jeden bisher erstellten Körper angewendet.
  • Überprüfen issues nach jedem rebuild und der Pro-Körper brep anwesenheit nach rebuildExact bevor Sie sich auf exakte Masseneigenschaften oder den STEP-Export verlassen.
  • Behalten Sie in den Skizzen die Einheiten Millimeter und Bogenmaß bei. Gradwerte Felder werden als solche dokumentiert (Drehwinkel, Kegel, Senkwinkel).

Rezepte entwerfen

cad.buildRecipe(name, input) wandelt einige technische Eingaben in einen vollständigen parametrischen Verlauf sowie eine einzeilige Zusammenfassung, die abgeleiteten Zahlen und die Designregeln, die sie erzeugt haben, um. Es gibt sieben Rezepte; Parameter ohne Standard werden von den anderen abgeleitet, wenn sie weggelassen werden.
NameTitelParameter (Standardwerte)
mounting_plateMontageplattewidth=100, depth=60, thickness=10, fastener=M8, fit=medium, counterbore=false, cornerRadius=0, edgeChamfer=0, edgeDistance
flangeVerschraubter FlanschouterDiameter=120, boreDiameter=40, thickness=14, boltCount=6, fastener=M10, fit=medium, boltCircleDiameter, hubDiameter=0, hubHeight=0, edgeChamfer=0
l_bracketL-HalterungbaseLength=60, legHeight=50, thickness=5, width=40, fastener=M6, fit=medium, holesPerLeg=1, cornerRadius=0
stepped_shaftAbgesetzter Schaftabschnitte, chamfer=1, keywaySection=-1, keyLength
pipe_bendRohrbogenouterDiameter=30, wall=3, legA=100, legB=100, bendAngle=90, bendRadius
duct_transitionKanalübergangshape=rect, width1=80, height1=50, width2=40, height2=40, length=120, wall=2
enclosureGehäuselength=120, width=80, height=40, wall=3, floor, cornerRadius=6, fastener=M3, bosses=true
Montageplatte für M8-Schrauben
import { cad } from "@cadcamfun/core"

const recipe = cad.buildRecipe("mounting_plate", { width: 100, depth: 60, thickness: 10, fastener: "M8" })
recipe.summary  // "100 x 60 x 10 mm plate with four holes for M8 screws (Ø9 mm, medium fit)"
recipe.derived  // { holeDiameter: 9, edgeDistance: 18, holeSpacingX: 64, holeSpacingY: 24 }
recipe.rules    // ["hole diameter from ISO 273",
                //  "centre to edge >= 1.5 x hole diameter",
                //  "centre to centre >= 2.5 x hole diameter"]

recipe.history.parameters  // { width: 100, depth: 60, thick: 10, hole: 9, inset: 18 }
// features: sketch "outline", extrude "plate", holes hole_sw, hole_se, hole_ne, hole_nw
//           placed at ["inset","inset"], ["width - inset","inset"], …

const mesh = cad.rebuild(recipe.history)          // issues: []
const exact = cad.rebuildExact(recipe.history, mesh)
cad.brep.massProperties(exact.bodies[0].brep).volume  // 57455.31 mm³ = 60000 − 4·π·4.5²·10
montageplattenrezept, M8 Zum Orbit ziehen · zum Zoomen scrollen · zum Schwenken mit der rechten Maustaste ziehen
Das umgebaute Rezept: 100 × 60 × 10 mm mit vier Ø9 Löchern 18 mm von jeder Kante entfernt. Da Lochpositionen Ausdruck der Breite und des Abstands sind, verschiebt eine Änderung der Breite im Verlauf die Löcher auf der rechten Seite mit.

Der Verlauf ist normal: Sie können ihn im Editor öffnen, einen Parameter ändern und neu erstellen. Das Rezept wählte nur sinnvolle Zahlen.

Evolventenräder

Ein Modul-2, 18-Zahn-Stirnrad
const spec = { moduleValue: 2, teeth: 18 }          // pressureAngle defaults to 20°
cad.gearDimensions(spec)
// { pitchRadius: 18, baseRadius: 16.914, tipRadius: 20, rootRadius: 15.5 }

const outline = cad.gearOutline(spec, 6)   // 324 points, 6 per flank
cad.gearOutline({ moduleValue: 2, teeth: 5 })
// throws: 'A gear needs a module > 0 and at least 6 whole teeth'
Stirnrad m = 2, z = 18 Zum Orbit ziehen · zum Zoomen scrollen · zum Schwenken mit der rechten Maustaste ziehen
gearOutline extruded 8 mm with an Ø8 bore. Pitch radius = m·z/2 = 18 mm, tip radius = pitch + m = 20 mm, root radius = pitch − 1.25·m = 15.5 mm, base radius = pitch·cos 20° ≈ 16.91 mm.
DimensionFormelm = 2, z = 18
Teilungsradiusm·z / 218
Spitzenradiustonhöhe + m20
Wurzelradiustonhöhe − 1.25·m15.5
Basisradiussteigung · cos α16.914
MIN_GEAR_TEETH ist 6: Darunter unterschneiden die Flanken den Grundkreis und benachbarte Zähne überlappen.

Verbindungs- und Passdaten

GrößeTonhöheGewindebohrerAbstand fein / mittel / grobKopf Ø × hSenkbohrung Ø × TiefeSenker Ø
M30.52.53.2 / 3.4 / 3.65.5 × 36.5 × 3.46
M50.84.25.3 / 5.5 / 5.88.5 × 510 × 5.710
M6—56.4 / 6.6 / 7———
M81.256.88.4 / 9 / 1013 × 815 × 916
M121.7510.213 / 13.5 / 14.518 × 1220 × 1324

Werte kommen von cad.metricThread(size), clearanceHole(size, fit) und tapDrill(size); die M6-Zeile wurde nur über die beiden Helfer abgefragt. Verwandte Regeln mit realen Ergebnissen für eine M6-Schraube und ihr Ø6.6-Spielloch:

HelferErgebnis
threadEngagement("M6", material)stahl 6, Aluminium 9, Guss 12, Kunststoff 12 mm
tappedHoleDepth("M6", 12)15.8 mm
minEdgeDistance(6.6) / (6.6, "plastic")9.9 / 13.2 mm
minHoleSpacing(6.6)16.5 mm (2.5 × Durchmesser)
keywayFor(25)über 22 bis 30: b 8, h 7, t1 4, t2 3.3
toleranceGrade(7, 25) / (6, 25)21 / 13 µm
FitArtAnwendungsfall
H7/h6standort (gleitend)von Hand zusammengesetzte und exakt positionierte Teile, Gleitzapfen, Führungsbuchsen
H7/g6enges Laufenpräzise Führung beweglicher Teile, Spindeln, Schieber
H7/f7läuftgleitlager, Wellen im allgemeinen Maschinenbau
H7/k6übergangzahnräder, Riemenscheiben und Lagerinnenringe mit leichtem Druck auftreiben
H7/n6interferenz (leichtes Drücken)buchsen und Naben eingepresst; Für kleine Drehmomente ist kein Schlüssel erforderlich
H7/p6einmischung (drücken)dauerhafter Presssitz der Buchsen im Gehäuse