Dokumentation
Exaktes CAD
Analysieren Sie die genaue Geometrie, exportieren Sie STEP und überprüfen Sie Baugruppenbeziehungen anhand von Szenenschnappschüssen oder gespeicherten Zeichnungen.
Automatisch aus dem Englischen übersetzt. Englisches Original ansehen
Senden Sie diese Anfragen an Ihren eigenen laufenden Sidecar. Werte bleiben in diesem Browser.
Wie das funktioniert
Der Sidecar lauscht an einem beim Start ausgewählten Loopback-Port und gibt ihn dort aus ready linie; Verwenden Sie diese URL und die CADCAMFUN_TOKEN es wurde damit begonnen. Anfragen gehen direkt von dieser Seite an diese Adresse.
Der Sidecar sendet CORS-Header nur an die Tauri-Ursprünge und an http://localhost oder http://127.0.0.1 auf jedem Port. Von den gehosteten Dokumenten aus blockiert der Browser die Antwort, also führen Sie die Dokumente lokal aus (bun run dev in packages/web), um den Spielplatz zu nutzen, oder kopieren Sie die Anfrage als Curl. Um zu experimentieren, ohne echte Daten zu berühren, starten Sie den Sidecar mit CADCAMFUN_DATA_DIR zeigte auf ein Wegwerfverzeichnis – siehe die API-Komplettlösung.
Operationen
5 Endpunkte in der cadExact gruppe, generiert aus der eigenen Gruppe des Sidecars OpenAPI-Dokument. Geschützte Operationen dauern Authorization: Bearer $CADCAMFUN_TOKEN; sehen authentifizierung. Verhalten und Grenzen sind in das Subsystemhandbuch.
| post | /api/cad/exact/analyze | cadExact.analyze |
| post | /api/cad/exact/step | cadExact.step |
| post | /api/cad/exact/assembly | cadExact.assembly |
| post | /api/cad/exact/setups | cadExact.setups |
| post | /api/cad/exact/hole | cadExact.hole |
/api/cad/exact
cadExact.analyze Erfordert Authorization: Bearer <token>.
{ elements?: object[] drawingId?: string ids?: string[] machining?: boolean }
200 objekt application/json
{ parts: Array<{ id: string name: string valid: boolean issues: string[] volume: number area: number centroid: { x: number y: number z: number } bounds: { min: { x: number y: number z: number } max: { x: number y: number z: number } } faces: number edges: number vertices: number surfaces: { [key: string]: number } throughHoles?: number holes: Array<{ entry: { x: number y: number z: number } direction: { x: number y: number z: number } diameter: number depth: number form: "simple" | "counterbore" | "countersink" bottom: "through" | "flat" | "drill-point" headDiameter?: number headDepth?: number }> machining: { prismatic: true holes: number pockets: number outlines: number top: number bottom: number islands?: number sideHoles?: number hiddenFaces?: number } | { prismatic: false reason: string } bosses: Array<{ diameter: number length: number free: "near" | "far" | "both" | "none" origin: { x: number y: number z: number } axis: { x: number y: number z: number } }> nurbsFaces?: Array<{ face: number normal: { x: number y: number z: number } spread: number trimmed: boolean }> fillets?: Array<{ face: number kind: "cylinder" | "torus" radius: number convex: boolean length: number }> swarfWalls?: Array<{ face: number kind: "plane" | "cone" | "cylinder" near: { x: number y: number z: number } height: number lean: number concaveRadius?: number }> faceNames?: string[] repair?: { verticesWelded: number edgesWelded: number collapsedUses: number validAfter: boolean issuesAfter: string[] } }> skipped: Array<{ id: string name: string reason: string }> totals: { parts: number volume: number area: number } }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
403 ForbiddenEncoded application/json
ForbiddenEncoded
404 NotFoundEncoded application/json
NotFoundEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// CadExactAnalyzeInput
const result = await client.cadExact.analyze({
elements: [
{}
],
drawingId: "",
ids: [
""
],
machining: false
}) curl
curl --request POST "${CADCAMFUN_URL}/api/cad/exact/analyze" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
cadExact.step Erfordert Authorization: Bearer <token>.
{ elements?: object[] drawingId?: string ids?: string[] faceted?: boolean author?: string }
200 objekt application/json
{ step?: string parts: Array<{ id: string name: string exact: boolean faces: number valid: boolean note?: string }> skipped: Array<{ id: string name: string reason: string }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
403 ForbiddenEncoded application/json
ForbiddenEncoded
404 NotFoundEncoded application/json
NotFoundEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// CadExactStepInput
const result = await client.cadExact.step({
elements: [
{}
],
drawingId: "",
ids: [
""
],
faceted: false,
author: ""
}) curl
curl --request POST "${CADCAMFUN_URL}/api/cad/exact/step" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
cadExact.assembly Erfordert Authorization: Bearer <token>.
{ elements?: object[] drawingId?: string washers?: boolean }
200 objekt application/json
{ parts: number interference: { clashes: Array<{ a: string b: string aName: string bName: string volume: number centroid: { x: number y: number z: number } }> expected: Array<{ a: string b: string aName: string bName: string volume: number note: string }> touching: Array<{ a: string b: string }> undetermined: Array<{ a: string b: string reason: string }> checked: number } clearance?: Array<{ a: string b: string aName: string bName: string distance: number overlap: boolean }> bom: Array<{ item: number name: string designation?: string material?: string quantity: number volume: number mass?: number parts: string[] }> joints: Array<{ parent: string child: string parentName: string childName: string kind: "revolute" | "fixed" origin: { x: number y: number z: number } axis: { x: number y: number z: number } axes: number }> fasteners: { plans: Array<{ id: string size: string threadName: string designation: string length: number seat: { x: number y: number z: number } direction: { x: number y: number z: number } bodies: string[] tapped?: string grip: number engagement?: number headWasher?: { designation: string inner: number outer: number thickness: number } nutWasher?: { designation: string inner: number outer: number thickness: number } nutWasherAt?: { x: number y: number z: number } nut?: { designation: string across: number height: number at: { x: number y: number z: number } } warnings: string[] }> unfastened: Array<{ bodies: string[] at: { x: number y: number z: number } reason: string }> existing: number } skipped: Array<{ id: string name: string reason: string }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
403 ForbiddenEncoded application/json
ForbiddenEncoded
404 NotFoundEncoded application/json
NotFoundEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// CadExactAssemblyInput
const result = await client.cadExact.assembly({
elements: [
{}
],
drawingId: "",
washers: false
}) curl
curl --request POST "${CADCAMFUN_URL}/api/cad/exact/assembly" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
cadExact.setups Erfordert Authorization: Bearer <token>.
{ elements?: object[] drawingId?: string ids?: string[] fixture?: "bottom" | "none" allowed?: Array<"+Z" | "-Z" | "+X" | "-X" | "+Y" | "-Y"> }
200 objekt application/json
{ parts: Array<{ id: string name: string plan: { setups: Array<{ orientation: "+Z" | "-Z" | "+X" | "-X" | "+Y" | "-Y" faces: number[] area: number share: number holes: Array<{ entry: { x: number y: number z: number } direction: { x: number y: number z: number } diameter: number depth: number form: "simple" | "counterbore" | "countersink" }> prismatic: { ok: true holes: number pockets: number outlines: number } | { ok: false reason: string } }> uncovered: Array<{ face: number kind: string area: number reason: string }> held: Array<{ face: number kind: string area: number }> indexed: Array<{ entry: { x: number y: number z: number } direction: { x: number y: number z: number } diameter: number depth: number form: "simple" | "counterbore" | "countersink" }> reach: Array<{ orientation: "+Z" | "-Z" | "+X" | "-X" | "+Y" | "-Y" faces: number area: number share: number }> faces: number area: number notes: string[] } }> skipped: Array<{ id: string name: string reason: string }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
403 ForbiddenEncoded application/json
ForbiddenEncoded
404 NotFoundEncoded application/json
NotFoundEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/cad/exact/setups`, {
method: "POST",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request POST "${CADCAMFUN_URL}/api/cad/exact/setups" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
cadExact.hole Erfordert Authorization: Bearer <token>.
{ elements?: object[] drawingId?: string id: string hole?: number boss?: number fillet?: number nurbs?: number distance?: number direction?: { x: number y: number z: number } mode?: "move" | "offset" | "draft" angle?: number neutral?: number pull?: { x: number y: number z: number } tolerance?: number radius?: number diameter?: number taper?: number fill?: boolean }
200 objekt | Objekt | Objekt | Objekt | Objekt application/json
{ ok: true id: string name: string hole: number holes: number before: { diameter: number depth: number form: "simple" | "counterbore" | "countersink" } edit: { kind: "resize" diameter: number taper?: number } | { kind: "fill" } volume: number originalVolume: number volumeChange: number faces: number valid: boolean } | { ok: true id: string name: string boss: number bosses: number before: { diameter: number length: number } diameter: number taper?: number volume: number originalVolume: number volumeChange: number faces: number valid: boolean } | { ok: true id: string name: string fillet: number fillets: number before: { radius: number convex: boolean } radius: number volume: number originalVolume: number volumeChange: number faces: number valid: boolean } | { ok: true id: string name: string nurbs: number nurbsFaces: number mode: "move" | "offset" | "draft" before: { normal: { x: number y: number z: number } spread: number } distance?: number direction?: { x: number y: number z: number } angle?: number approximate?: { deviation: number } volume: number originalVolume: number volumeChange: number faces: number valid: boolean } | { ok: false error: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
403 ForbiddenEncoded application/json
ForbiddenEncoded
404 NotFoundEncoded application/json
NotFoundEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/cad/exact/hole`, {
method: "POST",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request POST "${CADCAMFUN_URL}/api/cad/exact/hole" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
Schemata
Benannte Schemata, die über die Parameter, Körper und Antworten dieser Gruppe erreichbar sind. A ? markiert ein optionales Feld; | null markiert ein Feld, das möglicherweise mit einem Nullwert vorhanden ist.
BadRequestEncoded{ _tag: "BadRequest" message: string }
ForbiddenEncoded{ _tag: "Forbidden" message: string }
InternalErrorEncoded{ _tag: "InternalError" message: string }
NotFoundEncoded{ _tag: "NotFound" message: string }
Ich rufe diese Gruppe an
Vorgangs-IDs haben die Form cadExact.<name>. Das generierte Promise SDK (@cadcamfun/api/sdk) entlarvt die meisten von ihnen als client.<namespace>.<method>(input), wo input ist ein flaches Objekt aus Pfadparametern und Körperfeldern; Das SDK-Beispiel jeder Karte zeigt den genauen Zugriffs- und Eingabetyp. Mehrteilige Uploads, Binär- oder JavaScript-Antworten und unformatierte Webhooks werden nicht generiert; Diese Karten zeigen fetch stattdessen.
import { CadCam, ClientError } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
try {
await client.projects.list()
} catch (error) {
if (error instanceof ClientError) {
// Transport | UnexpectedStatus | UnsupportedContentType | MalformedResponse | SseEventTooLarge
} else {
// a declared error body: switch on error._tag
}
} Fehlerbehebung
| Symptom | Wahrscheinliche Ursache | Fix |
|---|---|---|
| 401 bei jedem Aufruf | Token von einem früheren Start oder fehlt Bearer präfix | Schicken Authorization: Bearer <token> mit dem Token wurde der Sidecar gestartet. |
| 400 bevor etwas passiert | Text oder Parameter stimmen nicht mit dem Schema überein | Vergleichen Sie die Nutzlast mit dem Anforderungsschema auf der Karte. |
| 403 oder 404 bei einem Datensatz, den du woanders siehst | Das amtierende Konto ist unterschiedlich | Schicken Sie das Richtige x-session-token, oder verwenden Sie das lokale Profil, das Eigentümer des Datensatzes ist. |
| 409 | Widersprüchlicher Status, z. B. ein doppelter Name oder ein veralteter Zweigkopf | Lesen Sie die Ressource erneut und versuchen Sie es erneut mit den aktuellen Daten. |
| Versuchen Sie es mit der Meldung „Von CORS blockiert“. | Die Dokumente werden von einem Nicht-Loopback-Ursprung bereitgestellt | Führen Sie die Dokumente lokal aus oder kopieren Sie die Anfrage als Curl. |
| Verbindung abgelehnt | Der Sidecar wurde an einem neuen Port neu gestartet | Lesen Sie den Port neu ready Zeile. |