Aller au contenu
CADCAMFUN
Docs

Documentation

Géométrie CAO

Dessinez des entités, des esquisses contraintes, des historiques paramétriques, des maillages et des solides exacts dans un noyau géométrique partagé.

Traduit automatiquement de l'anglais. Voir l'original en anglais

Entités de dessin

@cadcamfun/core exporte les fonctions CAO directement et sous le cad espace de noms. Les entités D 2D axées sur le schéma utilisent un _tag discriminateur : ligne, cercle, arc, polyligne, rectangle, ellipse, spline, texte, dimension, hachures et bloc. Chaque entité possède un identifiant, une couche, une visibilité et un état de verrouillage stables ; la sélection appartient à l’état de l’éditeur.

La géométrie des entités utilise les millimètres et les radians. Les angles d'arc sont normalisés sur un tour complet et les angles de début/fin égaux représentent un cercle complet. Une transformation d'entité locale applique l'échelle, la rotation, puis la translation ; Affine2D prend en charge les transformations composées qui peuvent inclure le cisaillement. Les adaptateurs d'éléments de scène et d'historique paramétrique ont leurs propres champs angulaires documentés, y compris le placement évalué en degrés et les contrôles de fonctionnalités.

entitySchemaOf(tag) renvoie le schéma pour un type d'entité. Décodez les données importées avant d’appeler les fonctions géométriques. Les limites, le pavage, les intersections, les décalages et l'accrochage sont des opérations distinctes ; le rendu d’une courbe tessellée ne remplace pas son entité analytique.

Esquisses contraintes

Le modèle d'esquisse contient des points nommés, des lignes entre les points, des cercles avec un centre et un rayon et des arcs dans le sens inverse des aiguilles d'une montre. Les identifiants de points partagés expriment des points de terminaison partagés. Les contraintes incluent la coïncidence, l'alignement horizontal et vertical, les distances, les longueurs, les lignes parallèles et perpendiculaires, les longueurs et rayons égaux, la tangence, la symétrie et l'incidence géométrique.

Le solveur numérique minimise les résidus de contraintes avec une itération de Levenberg – Marquardt et un jacobien à différence centrale. Il signale les degrés de liberté, les points libres, les équations redondantes et les contraintes conflictuelles. Un résultat peut être entièrement contraint, sous-contraint, sur-contraint, conflictuel ou échoué. Une solution sous-contrainte peut satisfaire toutes les dimensions tout en permettant le mouvement ; les appelants doivent préserver cette distinction.

Les contraintes d'esquisse reçoivent des nombres. Les historiques paramétriques résolvent les expressions de paramètres avant d’appeler le solveur. Les contraintes d'angle d'esquisse sont des radians ; utilisez la propre convention de saisie de la fonctionnalité lors de la conversion d'une dimension saisie par l'utilisateur.

Histoires paramétriques

Une pièce paramétrique stocke ses paramètres et l'historique des fonctionnalités ordonnées. La reconstruction évalue les expressions et les fonctions en séquence afin qu'une fonction puisse référencer des esquisses, des plans, des corps ou des outils créés précédemment. Le noyau comprend les extrusions, les révolutions, les lissages et les balayages, les booléens, les trous, les motifs, les modifications de faces, le texte, les filetages, les fonctions de tôlerie et les contrôles de liaison. La disponibilité d'une représentation exacte dépend de la séquence de fonctionnalités particulière.

rebuild produit des corps de maillage et des problèmes de fonctionnalités. rebuildExact rejoue l'histoire à travers le noyau de représentation des limites et enregistre pourquoi un corps n'a pas de représentation exacte. Conservez l’historique comme source modifiable ; les corps générés sont des sorties dérivées. Une fonctionnalité défaillante ou non prise en charge doit rester visible via son enregistrement de problème.

Lire le résultat du replay

Une sortie de maillage peut exister lorsque la relecture exacte ne peut pas représenter une entité. Vérifiez le corps et les enregistrements avant de faire des déclarations sur la géométrie exacte, le volume ou la fidélité de l'exportation.

Géométrie et placement du maillage

Les maillages utilisent une géométrie triangulaire indexée. La couche CAO fournit une construction primitive, des booléens de maillage, des assistants de balayage et de lissage, des utilitaires de topologie et normaux, ainsi qu'un nettoyage de géométrie. L'adaptateur de modèle CAM convertit les éléments de scène pris en charge en maillages, y compris les composants imbriqués, afin que l'analyse et la génération de parcours d'outil puissent utiliser la même géométrie placée.

La position, la rotation, l'échelle et la translation des éléments affectent la pièce résultante. Le placement exact de la scène reflète la transformation de la fenêtre autour du centre du cadre de sélection. Une mise à l'échelle non uniforme peut supprimer le chemin de modèle exact d'un élément ; la conversion de scène signale une raison et peut utiliser une représentation à facettes lors de l'exportation.

Représentation exacte des limites

cad.brep expose la géométrie analytique et NURBS avec la topologie des faces, des boucles, des arêtes, des arêtes et des sommets. Ses modules couvrent les primitives, les balayages, les lofts, les booléens, les modifications de visages, les mélanges, la couture, la tessellation, la classification, la validation, les propriétés de masse ainsi que la lecture et l'écriture STEP. history-brep.ts et scene-step.ts connectez ce noyau aux parties paramétriques et aux éléments de scène placés.

POST /api/cad/exact/analyze renvoie les problèmes de validité par pièce, le volume, la surface, le centroïde, les limites, le nombre de topologies, le nombre de surfaces, les trous reconnus et la classification d'usinage. Il renvoie également les éléments ignorés avec les raisons et les totaux globaux. Un résultat d'usinage prismatique indique les contours, les trous, les poches et les niveaux supérieur/inférieur ; les pièces non prises en charge portent une raison.

POST /api/cad/exact/assembly signale les interférences, les chevauchements attendus, les paires en contact et indéterminées, les éléments de nomenclature, les joints et les plans de fixation. Une géométrie indéterminée est un résultat signalé et non une preuve de dégagement. Ces routes d'analyse calculent les résultats sans altérer le dessin.

Importation et exportation

Le noyau comprend des aides à l'importation de DXF et de dessins, un chemin d'interprétation STEP prismatique et un lecteur STEP B-rep exact. Le chemin prismatique indique une empreinte au sol et une hauteur d'extrusion pour les plaques, supports et brides appropriés ; il rapporte des caractéristiques qu'un prisme ne peut pas décrire. Choisissez le lecteur exact lorsqu'une topologie STEP prise en charge exacte est nécessaire et inspectez les diagnostics à partir de l'un ou l'autre chemin.

sceneToStep écrit une scène en tant que STEP AP214. Les solides pris en charge exacts conservent une géométrie exacte ; les solides maillés uniquement peuvent être émis sous forme de solides à facettes. Les éléments non solides sont ignorés avec des raisons. Le faceted l’option contrôle cette solution de repli. Une réponse sans step ne contient aucun solide exportable.

Les routes HTTP exactes acceptent soit elements ou drawingId; les éléments explicites priment. Les tableaux d'instantanés autorisent 1–2,000 éléments et une sélection facultative de jusqu'à 200 identifiants. Avec un dessin stocké, le sidecar lit la scène selon les règles d'accès au dessin. Une source manquante, un dessin vide, un dessin inconnu ou un dessin refusé génère la demande ou l'erreur d'accès correspondante.

Dessins techniques

Le drawing l'espace de noms fournit des projections, des sections, des dimensions, une composition de feuille et une sortie SVG à partir de modèles 3D. Il s'agit d'une représentation distincte du dessin d'entité 2D modifiable et d'un programme d'usinage. La géométrie de projection et de section doit être régénérée après les modifications du modèle ; une exportation de feuille capture l'état du modèle utilisé pour le construire.

Où étendre la géométrie

Commencez par packages/core/src/cad/index.ts pour la surface CAO publique. Les opérations de l'entité vivent à côté entities.ts; la résolution de contraintes est dans sketch.ts; l'historique du maillage est présent history.ts; la rediffusion exacte est en cours history-brep.ts; la topologie exacte et les échanges sont en cours brep/. packages/core/src/drawing/ possède la sortie de feuille. Les modules de support dans le même dossier incluent expr.ts (expressions de paramètres telles que width / 2 + 3, résolus dans l'ordre des dépendances avec les cycles signalés comme erreurs), tolerance.ts (le segment corde-sagitta compte pour les courbes), gear.ts (Contours d'engrenages droits à développante ISO 53), thread.ts, sheet-metal.ts, fasteners.ts, recipes.ts (générateurs qui émettent des historiques de fonctionnalités complets et entièrement contraints), dfm.ts (résultats de conception pour la fabrication avec valeurs mesurées et requises), et dxf.ts.

Les fonctions de géométrie opèrent sur des valeurs sans ouvrir le stockage de l'application. Les services sidecar gèrent l'accès et la persistance, et les adaptateurs de bureau gèrent l'interaction et le rendu. Gardez les conversions explicites aux limites afin qu'un maillage d'affichage, un solide exact et un historique enregistré conservent leur signification distincte.

Créer, valider et exporter un solide

Cet exemple de base complet construit une boîte de 40 × 25 × 8 mm avec un coin à l'origine du monde, vérifie sa topologie, la mesure et exporte le texte STEP. Il nécessite uniquement le package principal de l'espace de travail et n'effectue aucune écriture d'application.

Une boîte exacte et son texte STEP
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

L’horodatage explicite rend reproductible la sortie des échanges répétés. Sans cela, l'écriture STEP utilise l'heure actuelle. massProperties renvoie également l'aire, les aires par face et un tenseur d'inertie autour du centroïde à la densité unitaire ; le volume est en mm³ et la surface est en mm². Convertissez explicitement la densité lors du calcul d’une masse physique.

Source: packages/core/src/cad/brep/primitives.ts, mass.ts, validate.ts, et step.ts.

Options de validation et de conversion

validateBrep retours valid, émettre des enregistrements, manifoldSolid, et genre/volume facultatif. manifoldSolid désigne des coques fermées dont chaque bord est utilisé deux fois dans des sens opposés. La tolérance de distance géométrique par défaut s'échelonne sur 10⁻⁵ de la taille du modèle avec un sol de 10⁻⁶ mm. Un appelant peut fournir tol, ignorez la vérification du volume/orientation avec skipVolume, ou utilisez un pavage grossier pour l'orientation avec coarseVolume.

Les API d'analyse exacte machining l'indicateur est par défaut vrai. Exportations de scène STEP faceted la valeur de repli par défaut est true et la planification des fixations d'assemblage washers l'option est par défaut true. Les ID de sélection font référence aux éléments de la scène, y compris les enfants de composants résolus par le parcours de la scène. Ces options HTTP affectent l'analyse/l'exportation, pas le dessin stocké.

Retours d'exportation de scène par partie exact, faces, valid, et une note facultative. Vérifiez ces champs à côté skipped: un solide à facettes valide peut être exportable sans conserver de surfaces analytiques.

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

Réparer une reconstruction ou une exportation ayant échoué

TrouverProchaine inspection
L'esquisse reste sous-contrainteLisez les degrés de liberté et les identifiants de points libres. Ajoutez les contraintes de position/orientation manquantes ; une ligne cotée avec une seule extrémité fixe peut toujours pivoter.
Conflit de contraintes d'esquisseUtilisez les ID de conflit nommés et le résidu pour localiser les dimensions incompatibles. Répéter une équation compatible est une redondance ; deux longueurs requises différentes sont en conflit.
La fonction historique fait référence à un corps ou à un avion inconnuVérifiez l’ordre des fonctionnalités et les identifiants. Les dépendances doivent exister plus tôt dans la relecture, et la suppression/suppression peut invalider les références ultérieures.
Modèle exact indisponible après la mise à l'échelleInspectez l'échelle non uniforme et la raison signalée par l'élément. Utilisez le placement uniforme pris en charge ou acceptez et étiquetez une exportation à facettes.
Le résultat STEP a sauté des éléments ou aucun texteVérifiez si la sélection contient des solides et si le repli à facettes est activé. Les sélections vides ou 2D uniquement ne peuvent pas produire un fichier STEP solide.

Les dimensions primitives doivent être positives et finies. Les fonctions de géométrie directe peuvent générer des erreurs de plage pour les dimensions non valides ; Les couches de transport et de service doivent convertir ces échecs en leurs propres résultats typés. Les problèmes de reconstruction sont associés aux ID de fonctionnalité afin qu'une défaillance puisse être réparée à sa source plutôt que masquée en conservant un maillage antérieur.

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

Résoudre un croquis étape par étape

Une esquisse est constituée de données simples : un tableau de entities (points, lignes, cercles, arcs) et un tableau de constraints. Les lignes, les cercles et les arcs font référence aux points par identifiant, de sorte que deux lignes partageant un point final partagent le même ID de point. Le solveur déplace uniquement les coordonnées des points et les rayons des cercles ; il n'ajoute ni ne supprime jamais d'entités.

p1 (fixe)p2p3p4 l1 · horizontalel2 · vertical l3 · horizontalel4 · vertical largeur = 40 profondeur = 25
L'esquisse utilisée dans les exemples : quatre points, quatre lignes, un point fixe, quatre contraintes d'orientation et deux cotes de longueur. Chaque degré de liberté est supprimé, donc le solveur rapporte fully-constrained avec dof = 0.
Résoudre un rectangle entièrement contraint
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)

Exécutez la même esquisse sans le fixed contrainte et le résultat change en under-constrained avec dof = 2 et free = ["p1", "p2", "p3", "p4"]. Le rectangle a toujours la bonne taille, mais il peut glisser en X et Y. Ajoutez une troisième longueur, { id: "w2", type: "length", line: "l3", value: 50 }, et le statut devient conflicting. conflicts puis répertorie les contraintes nommées qui ne peuvent pas être satisfaites ensemble, la pire en premier (par exemple w2 et width). Nommez les contraintes qui vous intéressent avec id; les contraintes sans nom sont signalées avec une étiquette générée telle que vertical#4.

OptionDéfautSignification
maxIterations200La limite supérieure des itérations de Levenberg – Marquardt avant la résolution est rapportée comme failed.
tolerance1e-9Le plus grand résidu absolu accepté comme résolu.
Champ de résultatContenu
sketchL'esquisse d'entrée avec les coordonnées et les rayons résolus.
statusfully-constrained, under-constrained, over-constrained, conflicting, ou failed.
dofDegrés de liberté restants.
freeID de point qui peuvent toujours se déplacer et ID de cercle dont le rayon peut toujours changer.
conflictsID de contrainte qui n’ont pas pu être satisfaits, le pire en premier.
redundantNombre d'équations redondantes (défaut de rang).
iterations, residual, messageDiagnostic du solveur.

Lancements d'entrée malformés

Un croquis qui fait référence à un point ou à une entité inconnue est mal formé plutôt qu'insoluble, et solveSketch jette un SketchError. Validez les esquisses importées avant de les résoudre en boucle.

Référence de contrainte

Chaque contrainte est un objet avec un type et un facultatif id. Les longueurs sont en millimètres et les angles en radians. Dans un historique paramétrique, tout value peut également être une chaîne d'expression de paramètre.

TaperChampsEffect
fixedpoint, facultatif x, yÉpingle un point, éventuellement à des coordonnées explicites.
coincidenta, bDeux points occupent la même position.
horizontal / verticallineUne droite est parallèle à X/Y.
horizontalPoints / verticalPointsa, bDeux points partagent une coordonnée Y/X.
distancea, b, valueDistance euclidienne entre deux points.
distanceX / distanceYa, b, valueSigné décalage horizontal/vertical.
lengthline, valueLongueur d'une ligne.
parallel / perpendiculara, bRelation entre deux lignes.
equalLength / equalRadiusa, bLongueurs de ligne égales/rayons de cercle ou d'arc.
radius / diametercircle, valueTaille d'un cercle ou d'un arc.
anglea, b, valueAngle dans le sens inverse des aiguilles d'une montre par rapport à la ligne a aligner b, en radians.
pointOnLine / pointOnCirclepoint et line / circleIncidence.
midpointpoint, lineUn point se situe au milieu d'une ligne.
symmetrica, b, lineDeux points se reflètent autour d'une ligne.
tangentLineCircleline, circleUne ligne touche un cercle ou un arc.
tangentCirclesa, b, facultatif internalCircles touch externally (distance = r1 + r2) or internally (distance = |r1 − r2|).
concentrica, bCentre partagé de cercles ou d’arcs.

Les arcs sont dans le sens inverse des aiguilles d'une montre à partir de start à end à propos center. Le rayon d'un cercle est une variable du solveur, donc un cercle sans radius, diameter, equalRadius, ou une contrainte de tangence apparaît dans free.

Construire une pièce paramétrique

A History est une table de paramètres plus une liste de fonctionnalités ordonnées. Les paramètres sont des nombres ou des expressions d'autres paramètres. Ils sont résolus dans l'ordre des dépendances et un cycle est une erreur qui nomme la boucle. Les fonctionnalités font référence aux paramètres par leur nom dans n'importe quel champ de dimension.

Plaque paramétrique : 40 × 25 × 8 mm avec un trou traversant Ø5 Faites glisser vers l'orbite · faites défiler pour zoomer · faites glisser vers la droite pour effectuer un panoramique
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).
Plaque avec un trou paramétrique
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 retours bodies (maillages triangulaires codés par la fonctionnalité qui les a créés), le résultat résolu parameters, le plan, le cadre et le résultat de la résolution de chaque esquisse, les mises à plat des fonctions de tôlerie et issues. Une fonctionnalité qui ne peut pas être construite est signalée dans issues avec son ID de fonctionnalité et sa gravité, et il est ignoré. Les fonctionnalités qui n'en dépendent pas sont toujours créées. rebuildExact(history, given?, options?) peut réutiliser une reconstruction de maillage que vous avez déjà et accepte un budgetMs budget-temps.

Les plans de base sont droitiers : XY a u = X, v = Y, normal +Z ; YZ a u = Y, v = Z, normal +X ; ZX a u = Z, v = X, normal +Y. Une esquisse, un trou ou un texte peut également être placé sur l'ID d'un objet antérieur. plane fonctionnalité, avec un offset le long de la normale.

FonctionnalitéChamps clés et valeurs par défaut
sketchplane, facultatif offset, sketch (entités, contraintes, paramètres paramétriques optionnels shapes: rectangle, cercle, polygone, ellipse, fente, polyligne).
extrudesketch, depth, direction up/down/symmetric, operation new/union/subtract/intersect, facultatif targets (par défaut : tout le monde jusqu'à présent), edge chanfrein/congé des faces d'extrémité (ends défaut both), corner traitement, et taper tirant d'eau en degrés. Les boucles à l'intérieur des boucles sont des trous (pairs-impairs).
revolvesketch, axis (x, y, ou une ligne d'esquisse), angle en degrés (par défaut 360), operation.
holeplane, offset, at [u, v], diameter, depth; kind simple (défaut), counterbore, ou countersink avec headDiameter, headDepth, et angle (par défaut 90°). Cosmétique en option thread remarque (par exemple M4), toleranceet ISO 286 fit tel que H7. Un fil cosmétique ne modifie pas la géométrie.
pattern, mirrorCopies d'un outil d'une fonctionnalité antérieure, appliquées de la même manière.
sweep, loft, coilProfils le long d'un chemin, entre des sections ou le long d'une hélice.
shell, fillet, draft, pushpullModifications des faces et des bords.
move, scale, split, combineOpérations corporelles.
rib, sheet, thread, textNervures, corps en tôle avec motifs plats, filetages modélisés et texte en traits.
plane, primitive, matePlans de construction, solides primitifs et accouplement d'assemblages.

Modifiez l'historique, pas le corps

Modifiez un paramètre et reconstruisez : chaque esquisse qui l'utilise est résolue et chaque solide et booléen est refait après. L'édition directe d'un maillage généré est perdue à la prochaine reconstruction.

Primitives et placement exacts

Le noyau B-rep construit directement des solides analytiques. Chaque constructeur prend un placement optionnel Frame; sans cela, le solide est placé dans le cadre du monde.

ConstructeurArgumentsPlacement mondial
makeBox(dx, dy, dz, placement?)Longueurs de bord en mmCoin minimum à l'origine.
makeCylinder(radius, height, placement?)Rayon et hauteurUn cône de rayons égaux ; axe selon Z.
makeCone(r1, r2, height, placement?)Rayons de base et supérieursAxe le long de Z.
makeSphere(radius, placement?)RayonCentré sur l'origine.
makeTorus(major, minor, placement?)Rayons des anneaux et des tubesAxe le long de Z.
Primitives exactes Faites glisser vers l'orbite · faites défiler pour zoomer · faites glisser vers la droite pour effectuer un panoramique
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).

Les dimensions doivent être positives et finies ; sinon les constructeurs génèrent une erreur de plage. Courir validateBrep sur tout ce que vous construisez à partir de booléens, de balayages ou d'importations avant de faire confiance aux résultats de volume ou d'exportation. Une primitive directement issue d'un constructeur est valide par construction.

Des pratiques de modélisation qui reconstruisent de manière fiable

  • Fixez un point et contraignez l'orientation avant d'ajouter des cotes. Une esquisse sous-contrainte peut satisfaire toutes les dimensions et continuer à se déplacer lors de la prochaine reconstruction.
  • Donnez à chaque dimension destinée à l'utilisateur une id ainsi, un rapport de conflit nomme quelque chose qu'une personne reconnaît.
  • Préférer les paramètres et expressions ("width / 2 + 3", "max(a, b) * 2") sur des littéraux répétés ; une édition pilote ensuite toute la partie.
  • Référencez les fonctionnalités antérieures par ID uniquement après qu’elles existent dans la liste. Réorganiser un historique peut transformer une référence valide en problème.
  • Utiliser targets sur les booléens lorsqu'une pièce possède plusieurs corps. La valeur par défaut applique l'opération à chaque corps construit jusqu'à présent.
  • Vérifier issues après chaque rebuild et le par corps brep présence après rebuildExact avant de s'appuyer sur des propriétés de masse exactes ou sur l'exportation STEP.
  • Conservez les unités en millimètres et en radians à l’intérieur des croquis. Les champs valorisés en degrés sont documentés comme tels (angle de révolution, cône, angle de fraisage).

Concevoir des recettes

cad.buildRecipe(name, input) transforme quelques entrées d'ingénierie en un historique paramétrique complet, plus un résumé d'une ligne, les nombres dérivés et les règles de conception qui les ont produits. Sept recettes existent ; les paramètres sans valeur par défaut sont dérivés des autres lorsqu'ils sont omis.
NomTitreParamètres (par défaut)
mounting_platePlaque de montagewidth=100, depth=60, thickness=10, fastener=M8, fit=medium, counterbore=false, cornerRadius=0, edgeChamfer=0, edgeDistance
flangeBride boulonnéeouterDiameter=120, boreDiameter=40, thickness=14, boltCount=6, fastener=M10, fit=medium, boltCircleDiameter, hubDiameter=0, hubHeight=0, edgeChamfer=0
l_bracketSupport en LbaseLength=60, legHeight=50, thickness=5, width=40, fastener=M6, fit=medium, holesPerLeg=1, cornerRadius=0
stepped_shaftArbre étagésections, chanfrein=1, keywaySection=-1, keyLength
pipe_bendCoude de tuyauouterDiameter=30, wall=3, legA=100, legB=100, bendAngle=90, bendRadius
duct_transitionTransition de conduitshape=rect, width1=80, height1=50, width2=40, height2=40, length=120, wall=2
enclosureEnceintelength=120, width=80, height=40, wall=3, floor, cornerRadius=6, fastener=M3, bosses=true
Plaque de montage pour vis M8
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
recette de plaque de montage, M8 Faites glisser vers l'orbite · faites défiler pour zoomer · faites glisser vers la droite pour effectuer un panoramique
La recette reconstruite : 100 × 60 × 10 mm avec quatre trous de Ø9 18 mm de chaque bord. Étant donné que les positions des trous sont des expressions de largeur et d'encart, la modification de la largeur dans l'historique déplace également les trous de droite.

L'historique est ordinaire : on peut l'ouvrir sous l'éditeur, changer un paramètre et reconstruire. La recette n'a choisi que des chiffres raisonnables.

Engrenages à développante

Un engrenage droit à module 2, 18 dents
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'
Engrenage droit m = 2, z = 18 Faites glisser vers l'orbite · faites défiler pour zoomer · faites glisser vers la droite pour effectuer un panoramique
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.
DimensionFormulem = 2, z = 18
Rayon de pasm·z / 218
Rayon de pointepas + m20
Rayon de racinepas − 1.25·m15.5
Rayon de basepas · cos α16.914
MIN_GEAR_TEETH est 6 : en dessous, les flancs coupent le cercle de base et les dents voisines se chevauchent.

Données de fixation et d'ajustement

TaillePasForet à tarauderJeu fin / moyen / grossierØ tête × hØ du lamage × profondeurØ de fraisage
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

Les valeurs viennent de cad.metricThread(size), clearanceHole(size, fit) et tapDrill(size); la ligne M6 a été interrogée uniquement via les deux assistants. Règles associées, avec des résultats réels pour une vis M6 et son trou de dégagement Ø6.6 :

AuxiliaireRésultat
threadEngagement("M6", material)acier 6, aluminium 9, fonte 12, plastique 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 × diamètre)
keywayFor(25)sur 22 jusqu'à 30 : b 8, h 7, t1 4, t2 3.3
toleranceGrade(7, 25) / (6, 25)21 / 13 µm
AjusterGentilCas d'utilisation
H7/h6emplacement (coulissant)pièces assemblées à la main et localisées avec précision, embouts coulissants, douilles de guidage
H7/g6fermer en cours d'exécutionguidage précis des pièces mobiles, broches, tiroirs
H7/f7en cours d'exécutionpaliers lisses, arbres dans la construction de machines en général
H7/k6transitionengrenages, poulies et bagues intérieures de roulements entraînés par une légère pression
H7/n6interférence (pression légère)bagues et moyeux enfoncés ; aucune clé n'est nécessaire pour un petit couple
H7/p6interférence (presse)ajustement permanent par pression des bagues dans les boîtiers