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.
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é
| Trouver | Prochaine inspection |
|---|---|
| L'esquisse reste sous-contrainte | Lisez 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'esquisse | Utilisez 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 inconnu | Vé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'échelle | Inspectez 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 texte | Vé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.
fully-constrained avec dof = 0.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.
| Option | Défaut | Signification |
|---|---|---|
maxIterations | 200 | La limite supérieure des itérations de Levenberg – Marquardt avant la résolution est rapportée comme failed. |
tolerance | 1e-9 | Le plus grand résidu absolu accepté comme résolu. |
| Champ de résultat | Contenu |
|---|---|
sketch | L'esquisse d'entrée avec les coordonnées et les rayons résolus. |
status | fully-constrained, under-constrained, over-constrained, conflicting, ou failed. |
dof | Degrés de liberté restants. |
free | ID de point qui peuvent toujours se déplacer et ID de cercle dont le rayon peut toujours changer. |
conflicts | ID de contrainte qui n’ont pas pu être satisfaits, le pire en premier. |
redundant | Nombre d'équations redondantes (défaut de rang). |
iterations, residual, message | Diagnostic 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.
| Taper | Champs | Effect |
|---|---|---|
fixed | point, facultatif x, y | Épingle un point, éventuellement à des coordonnées explicites. |
coincident | a, b | Deux points occupent la même position. |
horizontal / vertical | line | Une droite est parallèle à X/Y. |
horizontalPoints / verticalPoints | a, b | Deux points partagent une coordonnée Y/X. |
distance | a, b, value | Distance euclidienne entre deux points. |
distanceX / distanceY | a, b, value | Signé décalage horizontal/vertical. |
length | line, value | Longueur d'une ligne. |
parallel / perpendicular | a, b | Relation entre deux lignes. |
equalLength / equalRadius | a, b | Longueurs de ligne égales/rayons de cercle ou d'arc. |
radius / diameter | circle, value | Taille d'un cercle ou d'un arc. |
angle | a, b, value | Angle dans le sens inverse des aiguilles d'une montre par rapport à la ligne a aligner b, en radians. |
pointOnLine / pointOnCircle | point et line / circle | Incidence. |
midpoint | point, line | Un point se situe au milieu d'une ligne. |
symmetric | a, b, line | Deux points se reflètent autour d'une ligne. |
tangentLineCircle | line, circle | Une ligne touche un cercle ou un arc. |
tangentCircles | a, b, facultatif internal | Circles touch externally (distance = r1 + r2) or internally (distance = |r1 − r2|). |
concentric | a, b | Centre 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.
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 |
|---|---|
sketch | plane, facultatif offset, sketch (entités, contraintes, paramètres paramétriques optionnels shapes: rectangle, cercle, polygone, ellipse, fente, polyligne). |
extrude | sketch, 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). |
revolve | sketch, axis (x, y, ou une ligne d'esquisse), angle en degrés (par défaut 360), operation. |
hole | plane, 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, mirror | Copies d'un outil d'une fonctionnalité antérieure, appliquées de la même manière. |
sweep, loft, coil | Profils le long d'un chemin, entre des sections ou le long d'une hélice. |
shell, fillet, draft, pushpull | Modifications des faces et des bords. |
move, scale, split, combine | Opérations corporelles. |
rib, sheet, thread, text | Nervures, corps en tôle avec motifs plats, filetages modélisés et texte en traits. |
plane, primitive, mate | Plans 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.
| Constructeur | Arguments | Placement mondial |
|---|---|---|
makeBox(dx, dy, dz, placement?) | Longueurs de bord en mm | Coin minimum à l'origine. |
makeCylinder(radius, height, placement?) | Rayon et hauteur | Un cône de rayons égaux ; axe selon Z. |
makeCone(r1, r2, height, placement?) | Rayons de base et supérieurs | Axe le long de Z. |
makeSphere(radius, placement?) | Rayon | Centré sur l'origine. |
makeTorus(major, minor, placement?) | Rayons des anneaux et des tubes | Axe le long de Z. |
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
idainsi, 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
targetssur 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
issuesaprès chaquerebuildet le par corpsbrepprésence aprèsrebuildExactavant 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.
| Nom | Titre | Paramètres (par défaut) |
|---|---|---|
mounting_plate | Plaque de montage | width=100, depth=60, thickness=10, fastener=M8, fit=medium, counterbore=false, cornerRadius=0, edgeChamfer=0, edgeDistance |
flange | Bride boulonnée | outerDiameter=120, boreDiameter=40, thickness=14, boltCount=6, fastener=M10, fit=medium, boltCircleDiameter, hubDiameter=0, hubHeight=0, edgeChamfer=0 |
l_bracket | Support en L | baseLength=60, legHeight=50, thickness=5, width=40, fastener=M6, fit=medium, holesPerLeg=1, cornerRadius=0 |
stepped_shaft | Arbre étagé | sections, chanfrein=1, keywaySection=-1, keyLength |
pipe_bend | Coude de tuyau | outerDiameter=30, wall=3, legA=100, legB=100, bendAngle=90, bendRadius |
duct_transition | Transition de conduit | shape=rect, width1=80, height1=50, width2=40, height2=40, length=120, wall=2 |
enclosure | Enceinte | length=120, width=80, height=40, wall=3, floor, cornerRadius=6, fastener=M3, bosses=true |
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 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
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' | Dimension | Formule | m = 2, z = 18 |
|---|---|---|
| Rayon de pas | m·z / 2 | 18 |
| Rayon de pointe | pas + m | 20 |
| Rayon de racine | pas − 1.25·m | 15.5 |
| Rayon de base | pas · 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
| Taille | Pas | Foret à tarauder | Jeu fin / moyen / grossier | Ø tête × h | Ø du lamage × profondeur | Ø de fraisage |
|---|---|---|---|---|---|---|
| M3 | 0.5 | 2.5 | 3.2 / 3.4 / 3.6 | 5.5 × 3 | 6.5 × 3.4 | 6 |
| M5 | 0.8 | 4.2 | 5.3 / 5.5 / 5.8 | 8.5 × 5 | 10 × 5.7 | 10 |
| M6 | — | 5 | 6.4 / 6.6 / 7 | — | — | — |
| M8 | 1.25 | 6.8 | 8.4 / 9 / 10 | 13 × 8 | 15 × 9 | 16 |
| M12 | 1.75 | 10.2 | 13 / 13.5 / 14.5 | 18 × 12 | 20 × 13 | 24 |
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 :
| Auxiliaire | Ré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 |
| Ajuster | Gentil | Cas d'utilisation |
|---|---|---|
| H7/h6 | emplacement (coulissant) | pièces assemblées à la main et localisées avec précision, embouts coulissants, douilles de guidage |
| H7/g6 | fermer en cours d'exécution | guidage précis des pièces mobiles, broches, tiroirs |
| H7/f7 | en cours d'exécution | paliers lisses, arbres dans la construction de machines en général |
| H7/k6 | transition | engrenages, poulies et bagues intérieures de roulements entraînés par une légère pression |
| H7/n6 | interférence (pression légère) | bagues et moyeux enfoncés ; aucune clé n'est nécessaire pour un petit couple |
| H7/p6 | interférence (presse) | ajustement permanent par pression des bagues dans les boîtiers |