Documentazione
Geometria CAD
Entità di disegno, schizzi vincolati, storie parametriche, mesh e solidi esatti in un nucleo geometrico condiviso.
Tradotto automaticamente dall'inglese. Vedi l'originale in inglese
Entità di disegno
@cadcamfun/core esporta le funzioni CAD sia direttamente che sotto il file cad spazio dei nomi. Le entità 2D con primo schema utilizzano un _tag discriminatore: linea, cerchio, arco, polilinea, rettangolo, ellisse, spline, testo, quota, tratteggio e blocco. Ogni entità ha un identificatore, un livello, una visibilità e uno stato di blocco stabili; la selezione appartiene allo stato dell'editor.
La geometria delle entità utilizza millimetri e radianti. Gli angoli dell'arco sono normalizzati per un giro completo e gli angoli iniziali/finali uguali rappresentano un cerchio completo. Una trasformazione di entità locale applica la scala, la rotazione e quindi la traslazione; Affine2D supporta trasformazioni composte che possono includere il taglio. Gli adattatori degli elementi della scena e della cronologia parametrica dispongono dei propri campi angolari documentati, inclusi il posizionamento con valori in gradi e i controlli delle caratteristiche.
entitySchemaOf(tag) restituisce lo schema per un tipo di entità. Decodifica i dati importati prima di chiamare le funzioni geometriche. I limiti, la tassellatura, le intersezioni, gli offset e lo snap sono operazioni separate; il rendering di una curva tassellata non sostituisce la sua entità analitica.
Schizzi vincolati
Il modello di schizzo contiene punti con nome, linee tra punti, cerchi con centro e raggio e archi in senso antiorario. Gli identificatori di punti condivisi esprimono endpoint condivisi. I vincoli includono coincidenza, allineamento orizzontale e verticale, distanze, lunghezze, linee parallele e perpendicolari, lunghezze e raggi uguali, tangenza, simmetria e incidenza geometrica.
Il risolutore numerico minimizza i residui dei vincoli con un'iterazione Levenberg-Marquardt e uno Jacobiano della differenza centrale. Riporta gradi di libertà, punti liberi, equazioni ridondanti e vincoli contrastanti. Un risultato può essere completamente vincolato, sottovincolato, eccessivamente vincolato, in conflitto o non riuscito. Una soluzione sottovincolata può soddisfare ogni dimensione pur consentendo il movimento; i chiamanti devono preservare questa distinzione.
I vincoli dello schizzo ricevono numeri. Le storie parametriche risolvono le espressioni dei parametri prima di richiamare il risolutore. I vincoli dell'angolo dello schizzo sono radianti; utilizzare la convenzione di input della lavorazione durante la conversione di una dimensione immessa dall'utente.
Storie parametriche
Una parte parametrica memorizza i propri parametri e la cronologia delle funzionalità ordinate. La ricostruzione valuta le espressioni e le lavorazioni in sequenza in modo che una lavorazione possa fare riferimento a schizzi, piani, corpi o strumenti creati in precedenza. Il nucleo include estrusioni, rivoluzioni, loft e sweep, valori booleani, fori, modelli, modifiche delle facce, testo, filettature, lavorazioni di lamiera e controlli di accoppiamento. La disponibilità di una rappresentazione esatta dipende dalla particolare sequenza di caratteristiche.
rebuild produce corpi mesh e problemi di funzionalità. rebuildExact riproduce la storia attraverso il nucleo di rappresentazione dei confini e registra perché a un corpo manca una rappresentazione esatta. Conserva la cronologia come fonte modificabile; i corpi generati sono output derivati. Una funzionalità non riuscita o non supportata deve rimanere visibile attraverso il record del problema.
Leggi il risultato della riproduzione
L'output mesh può esistere quando la riproduzione esatta non può rappresentare una funzionalità. Controllare il corpo ed emettere documenti prima di avanzare affermazioni sulla geometria esatta, sul volume o sulla fedeltà dell'esportazione.
Geometria e posizionamento della mesh
Le mesh utilizzano la geometria del triangolo indicizzato. Il livello CAD fornisce costruzione primitiva, booleani mesh, aiutanti di sweep e loft, topologia e utilità normali e pulizia della geometria. L'adattatore del modello CAM converte gli elementi della scena supportati in mesh, inclusi i componenti nidificati, in modo che l'analisi e la generazione del percorso utensile possano utilizzare la stessa geometria posizionata.
La posizione, la rotazione, la scala e la traslazione dell'elemento influiscono sulla parte risultante. Il posizionamento esatto della scena rispecchia la trasformazione del viewport attorno al centro del riquadro di delimitazione. Il ridimensionamento non uniforme può rimuovere il percorso del modello esatto di un elemento; la conversione della scena segnala un motivo e può utilizzare una rappresentazione sfaccettata durante l'esportazione.
Rappresentazione esatta del confine
cad.brep espone la geometria analitica e NURBS con topologia di facce, loop, uso dei bordi, bordi e vertici. I suoi moduli coprono primitive, spostamenti, loft, booleani, modifiche di facce, fusioni, cucitura, tassellatura, classificazione, convalida, proprietà di massa e lettura e scrittura STEP. history-brep.ts e scene-step.ts collega questo nucleo alle parti parametriche e agli elementi della scena posizionati.
POST /api/cad/exact/analyze restituisce problemi di validità per parte, volume, area, centroide, limiti, conteggi di topologia, conteggi di superficie, fori riconosciuti e classificazione di lavorazione. Restituisce inoltre gli elementi saltati con motivazioni e totali aggregati. Un risultato di lavorazione prismatica riporta contorni, fori, tasche e livelli superiore/inferiore; le parti non supportate hanno un motivo.
POST /api/cad/exact/assembly segnala interferenze, sovrapposizioni previste, coppie toccanti e indeterminate, elementi della distinta base, giunti e piani di fissaggio. La geometria indeterminata è un risultato riportato, non una prova di autorizzazione. Questi percorsi di analisi calcolano i risultati senza alterare il disegno.
Importazione ed esportazione
Il nucleo dispone di DXF e aiutanti per l'importazione di disegni, un percorso di interpretazione STEP prismatico e un lettore B-rep STEP esatto. Il percorso prismatico legge l'impronta e l'altezza di estrusione per piastre, staffe e flange adatte; riporta caratteristiche che un prisma non può descrivere. Scegli il lettore esatto quando è necessaria l'esatta topologia STEP supportata e controlla la diagnostica da entrambi i percorsi.
sceneToStep scrive una scena come STEP AP214. I solidi supportati esatti mantengono la geometria esatta; i solidi solo mesh possono essere emessi come solidi sfaccettati. Gli elementi non solidi vengono saltati con motivazioni. IL faceted l'opzione controlla quel fallback. Una risposta senza step non contiene solidi esportabili.
I percorsi esatti HTTP accettano entrambi elements o drawingId; gli elementi espliciti hanno la precedenza. Gli array di snapshot consentono elementi 1–2,000 e una selezione facoltativa fino a 200 identificatori. Con un disegno memorizzato, il sidecar legge la scena secondo le regole di accesso al disegno. Una fonte mancante, un disegno vuoto, un disegno sconosciuto o un disegno negato producono la richiesta o l'errore di accesso corrispondente.
Disegni tecnici
Il drawing namespace fornisce proiezioni, sezioni, dimensioni, composizione del foglio e output SVG dai modelli 3D. Questa è una rappresentazione separata dal disegno modificabile dell'entità 2D e da un programma di lavorazione. La geometria della proiezione e della sezione dovrebbe essere rigenerata dopo le modifiche al modello; un'esportazione del foglio cattura lo stato del modello utilizzato per costruirlo.
Dove estendere la geometria
Inizia con packages/core/src/cad/index.ts per la superficie CAD pubblica. Le operazioni dell'entità vivono accanto entities.ts; la risoluzione dei vincoli è in vigore sketch.ts; la cronologia della mesh è presente history.ts; è disponibile la riproduzione esatta history-brep.ts; la topologia e lo scambio esatti sono sotto brep/. packages/core/src/drawing/ possiede l'output del foglio. I moduli di supporto nella stessa cartella includono expr.ts (espressioni di parametri come width / 2 + 3, risolto in ordine di dipendenza con i cicli segnalati come errori), tolerance.ts (il segmento corda-sagitta conta per le curve), gear.ts (ISO 53 contorni di ingranaggi cilindrici ad evolvente), thread.ts, sheet-metal.ts, fasteners.ts, recipes.ts (generatori che emettono cronologie di funzionalità complete e completamente vincolate), dfm.ts (risultati della progettazione per la produzione con valori misurati e richiesti), e dxf.ts.
Le funzioni geometriche operano sui valori senza aprire la memoria dell'applicazione. I servizi sidecar gestiscono l'accesso e la persistenza, mentre gli adattatori desktop gestiscono l'interazione e il rendering. Mantieni le conversioni esplicite ai confini in modo che una mesh di visualizzazione, un solido esatto e una cronologia salvata mantengano il loro significato distinto.
Costruisci, convalida ed esporta un solido
Questo esempio di base completo costruisce una scatola di 40 × 25 × 8 mm con un angolo all'origine globale, ne controlla la topologia, la misura ed esporta il testo STEP. Richiede solo il pacchetto principale dell'area di lavoro e non esegue scritture dell'applicazione.
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 Il timestamp esplicito rende riproducibile l'output di scambi ripetuti. Senza di essa, la scrittura STEP utilizza l'ora corrente. massProperties restituisce anche l'area, le aree per faccia e un tensore di inerzia attorno al baricentro a densità unitaria; il volume è mm³ e l'area è mm². Convertire esplicitamente la densità quando si calcola una massa fisica.
Fonte: packages/core/src/cad/brep/primitives.ts, mass.ts, validate.ts, e step.ts.
Opzioni di convalida e conversione
validateBrep ritorna valid, emettere record, manifoldSolide genere/volume facoltativo. manifoldSolid significa gusci chiusi con ogni bordo usato due volte in sensi opposti. La tolleranza della distanza geometrica predefinita scala come 10⁻⁵ della dimensione del modello con un pavimento di 10⁻⁶ mm. Un chiamante può fornire tol, saltare il controllo del volume/orientamento con skipVolumeoppure utilizzare una tassellatura grossolana per l'orientamento con coarseVolume.
Le API di analisi esatta machining flag è impostato su true per impostazione predefinita. Esportazione di scene STEP faceted il valore predefinito del fallback è true e la pianificazione dei dispositivi di fissaggio dell'assieme washers l'opzione ha il valore predefinito true. Gli ID di selezione si riferiscono agli elementi della scena, inclusi i componenti secondari risolti dall'attraversamento della scena. Queste opzioni HTTP influiscono sull'analisi/esportazione, non sul disegno archiviato.
L'esportazione della scena restituisce per parte exact, faces, valide una nota facoltativa. Controlla i campi accanto skipped: un solido sfaccettato valido può essere esportabile senza conservare le superfici analitiche.
Fonte: packages/core/src/cad/brep/validate.ts, scene-analysis.ts, scene-step.ts, assembly-analysis.ts, e packages/api/src/cad-exact.ts.
Riparare una ricostruzione o un'esportazione non riuscita
| Trovare | Prossima ispezione |
|---|---|
| Lo schizzo rimane sottovincolato | Lettura dei gradi di libertà e degli ID dei punti liberi. Aggiungere i vincoli di posizione/orientamento mancanti; una linea quotata con un solo punto finale fisso può ancora ruotare. |
| Conflitto tra i vincoli dello schizzo | Utilizza gli ID conflitto denominati e il residuo per individuare le dimensioni incompatibili. Ripetere un'equazione compatibile è ridondanza; due diverse lunghezze richieste sono in conflitto. |
| La funzione della storia fa riferimento a un corpo o un aereo sconosciuto | Controlla l'ordine e gli identificatori delle funzionalità. Le dipendenze devono esistere in precedenza nella riproduzione e la soppressione/eliminazione può invalidare i riferimenti successivi. |
| Modello esatto non disponibile dopo il ridimensionamento | Ispezionare la scala non uniforme e il motivo riportato dell'elemento. Utilizza il posizionamento uniforme supportato oppure accetta ed etichetta un'esportazione sfaccettata. |
| Il risultato STEP ha saltato elementi o nessun testo | Controlla se la selezione contiene solidi e se il fallback sfaccettato è abilitato. Le selezioni vuote o 2solo D non possono produrre un file STEP solido. |
Le dimensioni primitive devono essere positive e finite. Le funzioni di geometria diretta possono generare errori di intervallo per quote non valide; i livelli di trasporto e di servizio devono convertire tali errori nei propri risultati digitati. I problemi di ricostruzione sono legati agli ID delle funzionalità in modo che un errore possa essere riparato alla fonte anziché essere nascosto mantenendo una mesh precedente.
Fonte: packages/core/src/cad/sketch.test.ts, history.ts, scene-step.ts, e apps/sidecar/test/cad-exact.test.ts.
Risolvi uno schizzo passo dopo passo
Uno schizzo è costituito da dati semplici: una serie di entities (punti, linee, cerchi, archi) e una serie di constraints. Linee, cerchi e archi si riferiscono a punti tramite identificatore, quindi due linee che condividono un punto finale condividono lo stesso ID punto. Il risolutore sposta solo le coordinate del punto e i raggi del cerchio; non aggiunge né rimuove mai entità.
fully-constrained con 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) Esegui lo stesso schizzo senza il file fixed vincolo e il risultato cambia in under-constrained con dof = 2 e free = ["p1", "p2", "p3", "p4"]. Il rettangolo ha ancora la dimensione giusta, ma può scorrere in X e Y. Aggiungi una terza lunghezza, { id: "w2", type: "length", line: "l3", value: 50 }e lo stato diventa conflicting. conflicts quindi elenca i vincoli denominati che non possono essere soddisfatti insieme, iniziando dal peggiore (ad esempio w2 e width). Dai un nome ai vincoli che ti interessano id; i vincoli senza nome vengono segnalati con un'etichetta generata come vertical#4.
| Opzione | Predefinito | Senso |
|---|---|---|
maxIterations | 200 | Il limite superiore delle iterazioni Levenberg-Marquardt prima della risoluzione viene riportato come failed. |
tolerance | 1e-9 | Il più grande residuo assoluto accettato come risolto. |
| Campo risultato | Contenuto |
|---|---|
sketch | Lo schizzo di input con coordinate e raggi risolti. |
status | fully-constrained, under-constrained, over-constrained, conflicting, o failed. |
dof | Gradi di libertà rimanenti. |
free | ID punto che possono ancora spostarsi e ID cerchio il cui raggio può ancora cambiare. |
conflicts | ID vincolo che non è stato possibile soddisfare, prima il peggiore. |
redundant | Numero di equazioni ridondanti (deficit di rango). |
iterations, residual, message | Diagnostica del risolutore. |
Tiri di input non corretti
Uno schizzo che si riferisce a un punto o a un'entità sconosciuta è malformato anziché irrisolvibile e solveSketch lancia a SketchError. Convalida gli schizzi importati prima di risolverli in un ciclo.
Riferimento vincolo
Ogni vincolo è un oggetto con a type e un facoltativo id. Le lunghezze sono millimetri e gli angoli sono radianti. In una storia parametrica, any value può anche essere una stringa di espressione di parametro.
| Tipo | Campi | Effect |
|---|---|---|
fixed | point, facoltativo x, y | Blocca un punto, facoltativamente su coordinate esplicite. |
coincident | a, b | Due punti occupano la stessa posizione. |
horizontal / vertical | line | Una linea è parallela a X/Y. |
horizontalPoints / verticalPoints | a, b | Due punti condividono una coordinata Y/X. |
distance | a, b, value | Distanza euclidea tra due punti. |
distanceX / distanceY | a, b, value | Offset orizzontale/verticale firmato. |
length | line, value | Lunghezza di una linea. |
parallel / perpendicular | a, b | Rapporto tra due linee. |
equalLength / equalRadius | a, b | Lunghezze di linea / raggi di cerchio o arco uguali. |
radius / diameter | circle, value | Dimensione di un cerchio o di un arco. |
angle | a, b, value | Angolo in senso antiorario dalla linea a allineare b, in radianti. |
pointOnLine / pointOnCircle | point e line / circle | Incidenza. |
midpoint | point, line | Un punto si trova al centro di una linea. |
symmetric | a, b, line | Due punti si specchiano attorno ad una retta. |
tangentLineCircle | line, circle | Una linea tocca un cerchio o un arco. |
tangentCircles | a, b, facoltativo internal | Circles touch externally (distance = r1 + r2) or internally (distance = |r1 − r2|). |
concentric | a, b | Centro condiviso di cerchi o archi. |
Gli archi sono in senso antiorario da start a end di center. Il raggio di un cerchio è una variabile del risolutore, quindi un cerchio senza a radius, diameter, equalRadiuso viene visualizzato il vincolo di tangenza free.
Costruisci una parte parametrica
A History è una tabella di parametri più un elenco ordinato di funzionalità. I parametri sono numeri o espressioni di altri parametri. Vengono risolti in ordine di dipendenza e un ciclo è un errore che nomina il ciclo. Le caratteristiche fanno riferimento ai parametri per nome in qualsiasi campo dimensione.
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 ritorna bodies (mesh triangolari definite dalla funzione che le ha create), il problema è stato risolto parameters, il piano, la cornice e il risultato della soluzione di ogni schizzo, i modelli piatti delle lavorazioni di lamiera e issues. Viene segnalata una funzionalità che non può essere creata issues con l'ID della funzione e la gravità e viene ignorato. Le funzionalità che non dipendono da esso continuano a essere sviluppate. rebuildExact(history, given?, options?) può riutilizzare una ricostruzione mesh che già possiedi e accetta a budgetMs bilancio temporale.
I piani base sono destrimani: XY ha u = X, v = Y, normale +Z; YZ ha u = Y, v = Z, normale +X; ZX ha u = Z, v = X, normale +Y. È inoltre possibile inserire uno schizzo, un foro o un testo sull'ID di un precedente plane caratteristica, con un offset lungo la normale.
| Caratteristica | Campi chiave e impostazioni predefinite |
|---|---|
sketch | plane, facoltativo offset, sketch (entità, vincoli, parametrici opzionali shapes: rettangolo, cerchio, poligono, ellisse, asola, polilinea). |
extrude | sketch, depth, direction up/down/symmetric, operation new/union/subtract/intersect, facoltativo targets (impostazione predefinita: tutti finora), edge smusso/raccordo delle facce finali (ends predefinito both), corner trattamento, e taper tiraggio in gradi. I loop all'interno dei loop sono buchi (pari-dispari). |
revolve | sketch, axis (x, yo una linea di schizzo), angle in gradi (predefinito 360), operation. |
hole | plane, offset, at [u, v], diameter, depth; kind simple (predefinito), counterbore, o countersink con headDiameter, headDepth, e angle (predefinito 90°). Cosmetico opzionale thread nota (ad es M4), tolerancee ISO 286 fit ad esempio H7. Una filettatura cosmetica non modifica la geometria. |
pattern, mirror | Copie dello strumento di una funzionalità precedente, applicate allo stesso modo. |
sweep, loft, coil | Profili lungo un percorso, tra sezioni o lungo un'elica. |
shell, fillet, draft, pushpull | Modifiche a facce e bordi. |
move, scale, split, combine | Operazioni sul corpo. |
rib, sheet, thread, text | Nervature, corpi in lamiera con modelli piatti, filettature modellate e testo con caratteri tratti. |
plane, primitive, mate | Piani di costruzione, solidi primitivi e accoppiamento di assiemi. |
Modifica la cronologia, non il corpo
Modifica un parametro e ricostruisci: ogni schizzo che lo utilizza si risolve e ogni solido e booleano dopo viene rifatto. La modifica diretta di una mesh generata viene persa alla successiva ricostruzione.
Primitive e posizionamento esatti
Il kernel B-rep costruisce direttamente i solidi analitici. Ogni costruttore prende un posizionamento facoltativo Frame; senza uno, il solido viene posizionato nella cornice del mondo.
| Costruttore | Argomenti | Posizionamento mondiale |
|---|---|---|
makeBox(dx, dy, dz, placement?) | Lunghezze dei bordi in mm | Angolo minimo all'origine. |
makeCylinder(radius, height, placement?) | Raggio e altezza | Un cono con raggi uguali; asse lungo Z. |
makeCone(r1, r2, height, placement?) | Raggi base e superiore | Asse lungo Z. |
makeSphere(radius, placement?) | Raggio | Centrato sull'origine. |
makeTorus(major, minor, placement?) | Raggi dell'anello e del tubo | Asse lungo Z. |
Le dimensioni devono essere positive e finite; altrimenti i costruttori lanciano un errore di intervallo. Correre validateBrep su tutto ciò che costruisci da booleani, operazioni di scansione o importazioni prima di fidarti del volume o dei risultati dell'esportazione. Una primitiva direttamente da un costruttore è valida per costruzione.
Pratiche di modellazione che ricostruiscono in modo affidabile
- Correggere un punto e vincolare l'orientamento prima di aggiungere le quote. Uno schizzo sottovincolato può soddisfare ogni dimensione e spostarsi comunque alla ricostruzione successiva.
- Assegna a ogni dimensione rivolta all'utente un
idquindi una segnalazione di conflitto nomina qualcosa che una persona riconosce. - Preferire parametri ed espressioni (
"width / 2 + 3","max(a, b) * 2") su letterali ripetuti; una modifica quindi guida l'intera parte. - Fare riferimento alle funzionalità precedenti tramite ID solo dopo che sono presenti nell'elenco. Riordinare una cronologia può trasformare un riferimento valido in un problema.
- Utilizzo
targetssui booleani quando una parte ha più corpi. L'impostazione predefinita applica l'operazione a ogni corpo costruito finora. - Controllo
issuesdopo ognirebuilde il per-corpobreppresenza doporebuildExactprima di fare affidamento sulle proprietà di massa esatte o sull'esportazione STEP. - Mantieni le unità in millimetri e radianti all'interno degli schizzi. I campi con valori in gradi vengono documentati come tali (angolo di rivoluzione, conicità, angolo di svasatura).
Progettare ricette
cad.buildRecipe(name, input) trasforma alcuni input ingegneristici in una cronologia parametrica completa, oltre a un riepilogo di una riga, ai numeri derivati e alle regole di progettazione che li hanno prodotti. Esistono sette ricette; i parametri senza valore predefinito vengono derivati dagli altri quando omessi.
| Nome | Titolo | Parametri (predefiniti) |
|---|---|---|
mounting_plate | Piastra di montaggio | width=100, depth=60, thickness=10, fastener=M8, fit=medium, counterbore=false, cornerRadius=0, edgeChamfer=0, edgeDistance |
flange | Flangia imbullonata | outerDiameter=120, boreDiameter=40, thickness=14, boltCount=6, fastener=M10, fit=medium, boltCircleDiameter, hubDiameter=0, hubHeight=0, edgeChamfer=0 |
l_bracket | Staffa a L | baseLength=60, legHeight=50, thickness=5, width=40, fastener=M6, fit=medium, holesPerLeg=1, cornerRadius=0 |
stepped_shaft | Albero a gradini | sezioni, smusso=1, keywaySection=-1, keyLength |
pipe_bend | Gomito del tubo | outerDiameter=30, wall=3, legA=100, legB=100, bendAngle=90, bendRadius |
duct_transition | Transizione del condotto | shape=rect, width1=80, height1=50, width2=40, height2=40, length=120, wall=2 |
enclosure | Allegato | 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 La cronologia è ordinaria: puoi aprirla nell'editor, modificare un parametro e ricostruire. La ricetta ha scelto solo numeri ragionevoli.
Ingranaggi ad evolvente
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' | Dimensione | Formula | m = 2, z = 18 |
|---|---|---|
| Raggio del passo | m·z / 2 | 18 |
| Raggio della punta | passo + m | 20 |
| Raggio della radice | passo − 1.25·m | 15.5 |
| Raggio di base | passo · cos α | 16.914 |
MIN_GEAR_TEETH è 6: sotto, i fianchi tagliano il cerchio di base e i denti vicini si sovrappongono.
Dati di fissaggio e adattamento
| Misurare | Pece | Tocca il trapano | Gioco fine/medio/grossolano | Testa Ø × h | Ø lamatura × profondità | Ø svasatore |
|---|---|---|---|---|---|---|
| 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 |
I valori vengono da cad.metricThread(size), clearanceHole(size, fit) e tapDrill(size); la riga M6 è stata interrogata solo tramite i due helper. Regole correlate, con risultati reali per una vite M6 e il suo foro passante Ø6.6:
| Aiutante | Risultato |
|---|---|
threadEngagement("M6", material) | acciaio 6, alluminio 9, ghisa 12, plastica 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 × diametro) |
keywayFor(25) | da 22 fino a 30: b 8, h 7, t1 4, t2 3.3 |
toleranceGrade(7, 25) / (6, 25) | 21 / 13 µm |
| Adatto | Tipo | Caso d'uso |
|---|---|---|
| H7/h6 | posizione (scorrevole) | parti assemblate a mano e posizionate con precisione, rubinetti scorrevoli, boccole di guida |
| H7/g6 | corsa ravvicinata | guida precisa di parti mobili, mandrini, valvole a cassetto |
| H7/f7 | corsa | cuscinetti a strisciamento, alberi nella costruzione di macchine in generale |
| H7/k6 | transizione | ingranaggi, pulegge e anelli interni dei cuscinetti inseriti con una leggera pressione |
| H7/n6 | interferenza (pressione leggera) | boccole e mozzi pressati; nessuna chiave necessaria per una coppia ridotta |
| H7/p6 | interferenza (stampa) | inserimento a pressione permanente delle boccole negli alloggiamenti |