Dokumentation
Bearbeitung
Native Herstellung, einstellungsgesteuerte G-Code-Generierung, Vorschläge, Parsing und Wiedergabeüberprüfung.
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 toolpathGenerator 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/toolpaths/manufacture | toolpathGenerator.manufacture |
| post | /api/toolpaths/generate | toolpathGenerator.generate |
| post | /api/toolpaths/suggest | toolpathGenerator.suggest |
| post | /api/toolpaths/parse | toolpathGenerator.parse |
| post | /api/toolpaths/verify | toolpathGenerator.verify |
/api/toolpaths/manufacture
toolpathGenerator.manufacture Erfordert Authorization: Bearer <token>.
{ setupOrientation?: "+Z" | "-Z" | "+X" | "-X" | "+Y" | "-Y" material: string machine?: string machineConfig?: { id: string name: string type: string description?: string | null config: object } origin?: "stock-center" | "stock-corner" finishAllowance?: number scallop?: number schemaVersion: 1 id: string name: string elements: object[] stock?: { width: number height: number depth: number radius?: number x?: number y?: number topZ?: number allowance?: number material?: string elementId?: string } tolerance?: number resolution?: number workOffset?: "G54" | "G55" | "G56" | "G57" | "G58" | "G59" operations?: Array<{ id: string name?: string tool: string rpm?: number feed?: number plungeFeed?: number stepdown?: number stepover?: number coolant?: "off" | "flood" | "mist" radialEngagement?: number strategy: "face" bottom: number } | "mist" radialEngagement?: number strategy: "adaptive" region: { boundary: Array<{ x: number y: number }> islands?: Array<Array<{ x: number y: number }>> } top: number bottom: number allowance?: number } | "mist" radialEngagement?: number strategy: "pocket" region: { boundary: Array<{ x: number y: number }> islands?: Array<Array<{ x: number y: number }>> } top: number bottom: number allowance?: number finish?: boolean within?: { boundary: Array<{ x: number y: number }> islands?: Array<Array<{ x: number y: number }>> } } | "mist" radialEngagement?: number strategy: "profile" loop: Array<{ x: number y: number }> side: "outside" | "inside" top: number bottom: number allowance?: number finish?: boolean tabs?: Array<{ position: number width: number height: number }> leadIn?: "direct" | "arc" | "ramp" | "helix" leadRadius?: number } | "mist" radialEngagement?: number strategy: "bore" center: { x: number y: number } diameter: number top: number bottom: number allowance?: number } | "mist" radialEngagement?: number strategy: "drill" points: Array<{ x: number y: number }> top: number bottom: number cut?: "drill" | "spot" | "tap" | "ream" } | "mist" radialEngagement?: number strategy: "thread" center: { x: number y: number } diameter: number pitch: number internal: boolean top: number length: number rightHand?: boolean } | "mist" radialEngagement?: number strategy: "engrave" paths: Array<{ points: Array<{ x: number y: number }> closed: boolean }> top: number depth: number } | "mist" radialEngagement?: number strategy: "chamfer" loops: Array<{ points: Array<{ x: number y: number }> side: "outside" | "inside" }> top: number width: number tipOffset?: number } | "mist" radialEngagement?: number strategy: "surface" mode: "roughing" | "rest" | "parallel" | "waterline" | "steep-shallow" | "scallop" | "spiral" | "radial" | "flat" slopeAngle?: number allowance?: number scallop?: number clearing?: "contour" | "adaptive" angle?: number restFrom?: string center?: { x: number y: number } } | { id: string name?: string tool: string rpm?: number feed?: number plungeFeed?: number stepdown?: number stepover: number coolant?: "off" | "mist" radialEngagement?: number strategy: "multiaxis" mode?: "parallel" | "contour" | "swarf" top: number angle?: number toolAxis?: "normal" | "lead" lead?: number tilt?: number walls?: Array<{ bottom: Array<{ x: number y: number z: number }> top: Array<{ x: number y: number z: number }> normal: Array<{ x: number y: number z: number }> concaveRadius?: number }> near?: Array<{ x: number y: number z: number }> }> tools?: Array<{ id: string name: string kind: "flat" | "ball" | "bull" | "chamfer" | "spot" | "drill" | "facemill" | "threadmill" | "engraver" | "tap" | "reamer" diameter: number flutes: number material: "hss" | "hss-co" | "carbide" | "pcd" coating: "none" | "tin" | "ticn" | "altin" | "alcrn" | "zrn" | "dlc" | "diamond" cornerRadius?: number angle?: number tipDiameter?: number pitch?: number fluteLength: number shankDiameter: number stickout: number holder?: { diameter: number length: number } maxRpm?: number number?: number }> deburr?: number tabs?: { count: number width: number height: number } subprograms?: boolean nativeCycles?: boolean smoothing?: number postDefinition?: unknown print?: { layerHeight?: number firstLayerHeight?: number walls?: number topLayers?: number bottomLayers?: number infillDensity?: number infillPattern?: "lines" | "grid" | "triangles" | "honeycomb" | "gyroid" | "concentric" supports?: "none" | "buildplate" | "everywhere" supportAngle?: number adhesion?: "none" | "skirt" | "brim" | "raft" brimWidth?: number printSpeed?: number nozzleTemperature?: number bedTemperature?: number fan?: number vase?: boolean orientation?: "as-designed" | "auto" seam?: "nearest" | "aligned" | "random" retractionDistance?: number zHop?: number flow?: number relativeExtrusion?: boolean } progress?: { projectId: string runId: string } }
200 objekt | Objekt application/json
{ status: "ok" value: { schemaVersion: 1 jobId: string material: { id: string name: string iso: string } machine: { id: string name: string post: "generic" | "fanuc" | "grbl" | "linuxcnc" | "haas" | "siemens" | "heidenhain" | "okuma" | "mazak" } setupOrientation?: "+Z" | "-Z" | "+X" | "-X" | "+Y" | "-Y" origin: { x: number y: number z: number } stockBounds: { min: { x: number y: number z: number } max: { x: number y: number z: number } } operations: Array<{ id: string name: string strategy: "face" | "adaptive" | "pocket" | "profile" | "bore" | "drill" | "thread" | "engrave" | "chamfer" | "surface" | "multiaxis" | "print" toolId: string cut: "face" | "slot" | "rough-side" | "finish-wall" | "finish-floor" | "finish-3d" | "spot" | "thread-mill" | "tap" | "ream" | "print" status: "ok" | "failed" cutting?: { cut: "face" | "ream" rpm: number vc: number vcRecommended: number effectiveDiameter: number fz: number chipThickness: number feed: number plungeFeed: number ap: number ae: number stepoverPercent: number rampAngle: number helixPitch: number coolant: "off" | "flood" | "mist" peck?: number chipBreak?: boolean feedPerRev?: number passes?: number mrr: number powerKw: number torqueNm: number forceN: number deflectionMm: number limitedBy: string[] warnings: string[] exceeded: string[] source: string reference: { table: "MATERIALS" row: string rowName: string columns: { [key: string]: number } factors: { [key: string]: number } basis: string } } parameters: object overridden: string[] warnings: string[] startZ?: number cutLength: number timeSeconds: number removedVolume: number }> program: { name: string units: "mm" | "inch" workOffset: "G54" | "G55" | "G56" | "G57" | "G58" | "G59" toolpaths: Array<{ id: string name: string toolId: string spindleRpm: number coolant: "off" | "mist" moves: Array<{ _tag: "Rapid" to: { x: number y: number z: number } rotary?: { a?: number b?: number c?: number } expr?: { x?: unknown y?: unknown z?: unknown feed?: unknown } } | { _tag: "Linear" to: { x: number y: number z: number } feed: number rotary?: { a?: number b?: number c?: number } expr?: { x?: unknown y?: unknown z?: unknown feed?: unknown } } | { _tag: "Arc" to: { x: number y: number z: number } center: { x: number y: number } clockwise: boolean feed: number } | { _tag: "Dwell" seconds: number } | { _tag: "Comment" text: string } | { _tag: "Cycle" cycle: "drill" | "dwell" | "peck" | "chipBreak" | "bore" to: { x: number y: number z: number } feed: number peckDepth: number dwellSeconds: number retractHeight: number pitch?: number } | { _tag: "Orient" a?: number b?: number c?: number } | { _tag: "Assign" variable: { scope: "local" | "global" | "system" index: number } | { name: string } value: unknown } | { _tag: "MacroCall" name: string args: object } | { _tag: "If" condition: { cmp: "eq" | "ne" | "lt" | "le" | "gt" | "ge" a: unknown b: unknown } } | { _tag: "Else" } | { _tag: "EndIf" } | { _tag: "While" condition: { cmp: "eq" | { _tag: "EndWhile" } | { _tag: "Label" name: string } | { _tag: "Goto" label: string direction?: "auto" | "forward" | "backward" condition?: { cmp: "eq" | { _tag: "CycleBegin" family: "heidenhain" number: number name: string params: { [key: string]: number } } | { _tag: "CycleEnd" } | { _tag: "Message" text: string }> operation?: { id: string name: string } }> metadata?: { [key: string]: string } } tools: Array<{ id: string name: string kind: "flat" | "ball" | "bull" | "facemill" | "threadmill" | "engraver" | "reamer" diameter: number flutes: number material: "hss" | "hss-co" | "carbide" | "pcd" coating: "none" | "tin" | "ticn" | "altin" | "alcrn" | "zrn" | "dlc" | "diamond" cornerRadius?: number angle?: number tipDiameter?: number pitch?: number fluteLength: number shankDiameter: number stickout: number holder?: { diameter: number length: number } maxRpm?: number number: number }> nc: string claims: Array<{ id: "bed-fit" | "heated-start" | "layers-rise" | "wall-coverage" | "skin-coverage" | "no-spill" | "filament" | "cutting-data" | "machine-limits" | "operations-complete" | "no-rapid-in-stock" | "holder-clearance" | "no-gouge" | "material-removed" | "nc-replay" | "machine-travel" | "machine-clearance" | "setup-workholding" | "part-coverage" status: "passed" | "failed" | "unsupported" | "unresolved" detail: string }> issues: Array<{ tag: "InvalidInput" | "UnknownMaterial" | "UnknownTool" | "NoSuitableTool" | "UnsupportedCapability" | "GenerationFailed" | "EmptyToolpath" | "MachineLimit" | "RapidInStock" | "HolderCollision" | "Gouge" | "RemainingStock" | "ReplayMismatch" | "Cancelled" severity: "error" | "warning" stage: "prepare" | "plan" | "generate" | "post" | "replay" | "evidence" message: string operationId?: string line?: number point?: { x: number y: number z: number } }> release: "blocked" | "preview" | "verified-program" stock: { initialVolume: number finalVolume: number partVolume: number remainingVolume: number maxRemaining: number cellSize: number fiveAxis?: { voxelMm: number removedLower: number removedUpper: number remainingLower: number remainingUpper: number } } cycleTimeSeconds: number identity: { job: string part: string nc: string algorithm: string } notes: string[] print?: { dialect: "marlin" | "klipper" | "reprap" filament: { material: string densityGcm3: number diameter: number } nozzle: { diameter: number temperature: number bedTemperature: number } layers: number layerHeight: number filamentMm: number filamentGrams: number timeSeconds: number travelMm: number retractions: number lengthByKind: { [key: string]: number } size: { x: number y: number z: number } orientation: string settings: { layerHeight?: number firstLayerHeight?: number walls?: number topLayers?: number bottomLayers?: number infillDensity?: number infillPattern?: "lines" | "grid" | "triangles" | "honeycomb" | "gyroid" | "concentric" supports?: "none" | "buildplate" | "everywhere" supportAngle?: number adhesion?: "none" | "skirt" | "brim" | "raft" brimWidth?: number printSpeed?: number nozzleTemperature?: number bedTemperature?: number fan?: number vase?: boolean orientation?: "as-designed" | "auto" seam?: "nearest" | "aligned" | "random" retractionDistance?: number zHop?: number flow?: number relativeExtrusion?: boolean } } tolerance?: { requested: number terms: Array<{ id: "source-tessellation" | "part-model" | "path" | "nc-rounding" | "stock-replay" mm: number basis: string }> achieved: number unbounded: string[] met: boolean } } } | { status: "failed" issues: Array<{ tag: "InvalidInput" | "Cancelled" severity: "error" | "warning" stage: "prepare" | "evidence" message: string operationId?: string line?: number point?: { x: number y: number z: number } }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
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}` },
})
// ToolpathGeneratorManufactureInput
const result = await client.toolpathGenerator.manufacture({
setupOrientation: "+Z",
material: "",
machine: "",
machineConfig: {
id: "",
name: "",
type: "",
config: {}
},
origin: "stock-center",
finishAllowance: 0,
scallop: 0,
schemaVersion: 1,
id: "",
name: "",
elements: [
{}
],
stock: {
width: 0,
height: 0,
depth: 0
},
tolerance: 0,
resolution: 0,
workOffset: "G54",
operations: [
{
id: "",
tool: "",
strategy: "face",
bottom: 0
}
],
tools: [
{
id: "",
name: "",
kind: "flat",
diameter: 0,
flutes: 1,
material: "hss",
coating: "none",
fluteLength: 0,
shankDiameter: 0,
stickout: 0
}
],
deburr: 0,
tabs: {
count: 1,
width: 0,
height: 0
},
subprograms: false,
nativeCycles: false,
smoothing: 0,
postDefinition: null,
print: {},
progress: {
projectId: "",
runId: ""
}
}) curl
curl --request POST "${CADCAMFUN_URL}/api/toolpaths/manufacture" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/toolpaths/generate
toolpathGenerator.generate Erfordert Authorization: Bearer <token>.
{ settings?: { machineType?: "mill" | "lathe" | "3dprinter" operationType?: "contour" | "pocket" | "drill" | "engrave" | "profile" | "threading" | "3d_surface" | "probing" | "multiaxis" | "facing" | "turning" | "boring" | "threading" | "grooving" | "parting" | "knurling" | "standard" | "vase" | "support" | "infill" | "raft" | "brim" material?: "aluminum" | "steel" | "wood" | "plastic" | "brass" | "titanium" | "composite" | "other" toolType?: "endmill" | "ballnose" | "drill" | "vbit" | "chamfer" | "threadmill" | "reamer" | "probe" | "toolsetter" | "turning" | "facing" | "threading" | "grooving" | "boring" | "parting" | "brass" | "hardened" | "ruby" | "standard" toolDiameter?: number flutes?: number depth?: number stepdown?: number stepover?: number feedrate?: number plungerate?: number rpm?: number tolerance?: number offset?: "inside" | "outside" | "center" direction?: "climb" | "conventional" coolant?: boolean finishingPass?: boolean finishingAllowance?: number finishingStrategy?: "contour" | "parallel" | "spiral" | "radial" surfaceStrategy?: "roughing" | "parallel" | "waterline" | "steep-shallow" | "scallop" | "spiral" | "radial" | "flat" steepAngle?: number surfaceClearing?: "contour" | "adaptive" adaptiveEngagement?: number scallop?: number rasterAngle?: number rasterOneWay?: boolean useAI?: boolean aiDifficulty?: "simple" | "moderate" | "complex" aiOptimize?: "speed" | "quality" | "balance" optimizePath?: boolean useArcFitting?: boolean useHighSpeedMode?: boolean useExactStop?: boolean useToolCompensation?: boolean useAdaptiveFeeds?: boolean useRestMachining?: boolean restToolDiameter?: number fiveAxisStrategy?: "parallel" | "contour" fiveAxisToolAxis?: "normal" | "lead" fiveAxisLead?: number fiveAxisTilt?: number fiveAxisGouge?: boolean toolNumber?: number workOffset?: "G54" | "G55" | "G56" | "G57" | "G58" | "G59" probeCycle?: "zSurface" | "edgeX" | "edgeY" | "corner" | "bore" | "boss" | "toolLength" probeFeed?: number probeSearch?: number probeStylus?: number probeDialect?: "linuxcnc" | "fanuc" probeFeatureSize?: number threadPitch?: number threadType?: "internal" | "external" threadHand?: "right" | "left" threadPasses?: number threadSpringPasses?: number latheZero?: "face" | "chuck" bedOrigin?: "corner" | "center" nozzleDiameter?: number filamentDiameter?: number layerHeight?: number extrusionWidth?: number printSpeed?: number printTemperature?: number bedWidth?: number bedDepth?: number centerOnBed?: boolean bedTemperature?: number stockDiameter?: number stockLength?: number spindleDirection?: "cw" | "ccw" turningOperation?: "external" | "internal" | "face" applyToolCompensation?: boolean workholding?: "vise" | "clamps" | "plate" | "none" viseJawAxis?: "x" | "y" clampDepth?: number viseJawHeight?: number parallelsHeight?: number workholdingConfigured?: boolean latheTurret?: "rear" | "front" chuckType?: "3-jaw" | "4-jaw" | "collet" noseRadius?: number gripLength?: number tailstock?: boolean stockBore?: number printerKinematics?: "cartesian" | "corexy" | "bed-slinger" | "delta" buildHeight?: number originType?: "workpiece-center" | "workpiece-corner" | "workpiece-corner2" | "machine-zero" | "custom" originX?: number originY?: number originZ?: number } geometry?: { geometryType?: "rectangle" | "circle" | "polygon" | "custom" | "selected" | "cube" | "sphere" | "cylinder" | "cone" | "extrude" | "line" | "pyramid" | "hemisphere" | "ellipsoid" | "capsule" | "triangle" | "ellipse" | "prism" rectangleWidth?: number rectangleHeight?: number circleRadius?: number polygonSides?: number polygonRadius?: number customPath?: string selectedElements?: object[] stock?: { width: number height: number depth: number radius?: number x?: number y?: number topZ?: number allowance?: number material?: string elementId?: string } } printer?: { infillDensity?: number infillPattern?: "grid" | "lines" | "triangles" | "honeycomb" | "gyroid" | "concentric" supportType?: "none" | "minimal" | "full" shellCount?: number printResolution?: "standard" | "high" | "low" printOrientation?: "original" | "auto-optimal" filament?: "pla" | "petg" | "abs" | "asa" | "tpu" | "nylon" | "pc" topLayers?: number bottomLayers?: number firstLayerHeight?: number firstLayerSpeed?: number outerWallSpeed?: number infillSpeed?: number bridgeSpeed?: number supportSpeed?: number travelSpeed?: number retractionDistance?: number retractionSpeed?: number retractMinTravel?: number zHop?: number fanSpeed?: number fanFromLayer?: number minLayerTime?: number flow?: number seam?: "nearest" | "aligned" | "random" outerWallFirst?: boolean supportAngle?: number supportDensity?: number supportXYGap?: number supportZGap?: number supportInterfaceLayers?: number adhesion?: "none" | "skirt" | "brim" | "raft" brimWidth?: number skirtLoops?: number skirtDistance?: number raftLayers?: number flavor?: "marlin" | "klipper" | "reprap" relativeExtrusion?: boolean pressureAdvance?: number acceleration?: number startGcode?: string endGcode?: string } machine?: { id: string name?: string axes?: 3 | 4 | 5 controller?: string fiveAxis?: { layout: "table-AC" | "table-BC" tilt: { min: number max: number } rotation?: { min: number max: number } pivot?: { x: number y: number z: number } tcp?: "control" | "program" } } stamp?: string evidence?: boolean progress?: { projectId: string runId: string } }
200 objekt application/json
{ gcode: string cycles: Array<{ gcode: string }> warnings: string[] stats: { lines: number cutLength: number rapidLength: number minZ: number maxZ: number estimatedSeconds: number bounds: { min: { x: number y: number z: number } max: { x: number y: number z: number } } } program: { name: string units: "mm" | "inch" workOffset: "G54" | "G55" | "G56" | "G57" | "G58" | "G59" toolpaths: Array<{ id: string name: string toolId: string spindleRpm: number coolant: "off" | "flood" | "mist" moves: Array<{ _tag: "Rapid" to: { x: number y: number z: number } rotary?: { a?: number b?: number c?: number } expr?: { x?: unknown y?: unknown z?: unknown feed?: unknown } } | { _tag: "Linear" to: { x: number y: number z: number } feed: number rotary?: { a?: number b?: number c?: number } expr?: { x?: unknown y?: unknown z?: unknown feed?: unknown } } | { _tag: "Arc" to: { x: number y: number z: number } center: { x: number y: number } clockwise: boolean feed: number } | { _tag: "Dwell" seconds: number } | { _tag: "Comment" text: string } | { _tag: "Cycle" cycle: "drill" | "dwell" | "peck" | "chipBreak" | "tap" | "ream" | "bore" to: { x: number y: number z: number } feed: number peckDepth: number dwellSeconds: number retractHeight: number pitch?: number } | { _tag: "Orient" a?: number b?: number c?: number } | { _tag: "Assign" variable: { scope: "local" | "global" | "system" index: number } | { name: string } value: unknown } | { _tag: "MacroCall" name: string args: object } | { _tag: "If" condition: { cmp: "eq" | "ne" | "lt" | "le" | "gt" | "ge" a: unknown b: unknown } } | { _tag: "Else" } | { _tag: "EndIf" } | { _tag: "While" condition: { cmp: "eq" | { _tag: "EndWhile" } | { _tag: "Label" name: string } | { _tag: "Goto" label: string direction?: "auto" | "forward" | "backward" condition?: { cmp: "eq" | { _tag: "CycleBegin" family: "heidenhain" number: number name: string params: { [key: string]: number } } | { _tag: "CycleEnd" } | { _tag: "Message" text: string }> operation?: { id: string name: string } }> metadata?: { [key: string]: string } } evidence?: { schema: "cadcamfun/program-record@1" inputs: { digest: string machineType: string operationType: string material: string elements: string[] stock?: { width: number height: number depth: number topZ: number } } tool: { type: string diameter: number flutes: number } process: { rpm: number feed: number plunge: number stepdown: number stepover: number coolant: boolean } cuttingData: { status: "kernel" | "manual" | "not-applicable" detail: string recommended?: { rpm: number feed: number plunge: number stepdown: number } reference?: { table: "MATERIALS" row: string rowName: string columns: { [key: string]: number } factors: { [key: string]: number } basis: string } } program: { sha256: string lines: number cutLength: number estimatedSeconds: number } checks: Array<{ id: "generated" | "cutting-data" | "safe-height" | "no-rapid-in-material" | "tool-clearance" | "within-stock" | "no-gouge" | "nc-interpretation" | "bed-fit" | "heated-start" | "layers-rise" | "wall-coverage" | "skin-coverage" | "no-spill" | "filament" status: "passed" | "failed" | "unresolved" | "not-run" detail: string line?: number }> result: "passed" | "warnings" | "failed" } print?: { layers: number filamentMm: number filamentGrams: number timeSeconds: number travelMm: number retractions: number lengthByKind: { [key: string]: number } size: { x: number y: number z: number } } }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
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/toolpaths/generate`, {
method: "POST",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request POST "${CADCAMFUN_URL}/api/toolpaths/generate" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/toolpaths/suggest
toolpathGenerator.suggest Erfordert Authorization: Bearer <token>.
{ settings?: { machineType?: "mill" | "lathe" | "3dprinter" operationType?: "contour" | "pocket" | "drill" | "engrave" | "profile" | "threading" | "3d_surface" | "probing" | "multiaxis" | "facing" | "turning" | "boring" | "threading" | "grooving" | "parting" | "knurling" | "standard" | "vase" | "support" | "infill" | "raft" | "brim" material?: "aluminum" | "steel" | "wood" | "plastic" | "brass" | "titanium" | "composite" | "other" toolType?: "endmill" | "ballnose" | "drill" | "vbit" | "chamfer" | "threadmill" | "reamer" | "probe" | "toolsetter" | "turning" | "facing" | "threading" | "grooving" | "boring" | "parting" | "brass" | "hardened" | "ruby" | "standard" toolDiameter?: number flutes?: number depth?: number stepdown?: number stepover?: number feedrate?: number plungerate?: number rpm?: number tolerance?: number offset?: "inside" | "outside" | "center" direction?: "climb" | "conventional" coolant?: boolean finishingPass?: boolean finishingAllowance?: number finishingStrategy?: "contour" | "parallel" | "spiral" | "radial" surfaceStrategy?: "roughing" | "parallel" | "waterline" | "steep-shallow" | "scallop" | "spiral" | "radial" | "flat" steepAngle?: number surfaceClearing?: "contour" | "adaptive" adaptiveEngagement?: number scallop?: number rasterAngle?: number rasterOneWay?: boolean useAI?: boolean aiDifficulty?: "simple" | "moderate" | "complex" aiOptimize?: "speed" | "quality" | "balance" optimizePath?: boolean useArcFitting?: boolean useHighSpeedMode?: boolean useExactStop?: boolean useToolCompensation?: boolean useAdaptiveFeeds?: boolean useRestMachining?: boolean restToolDiameter?: number fiveAxisStrategy?: "parallel" | "contour" fiveAxisToolAxis?: "normal" | "lead" fiveAxisLead?: number fiveAxisTilt?: number fiveAxisGouge?: boolean toolNumber?: number workOffset?: "G54" | "G55" | "G56" | "G57" | "G58" | "G59" probeCycle?: "zSurface" | "edgeX" | "edgeY" | "corner" | "bore" | "boss" | "toolLength" probeFeed?: number probeSearch?: number probeStylus?: number probeDialect?: "linuxcnc" | "fanuc" probeFeatureSize?: number threadPitch?: number threadType?: "internal" | "external" threadHand?: "right" | "left" threadPasses?: number threadSpringPasses?: number latheZero?: "face" | "chuck" bedOrigin?: "corner" | "center" nozzleDiameter?: number filamentDiameter?: number layerHeight?: number extrusionWidth?: number printSpeed?: number printTemperature?: number bedWidth?: number bedDepth?: number centerOnBed?: boolean bedTemperature?: number stockDiameter?: number stockLength?: number spindleDirection?: "cw" | "ccw" turningOperation?: "external" | "internal" | "face" applyToolCompensation?: boolean workholding?: "vise" | "clamps" | "plate" | "none" viseJawAxis?: "x" | "y" clampDepth?: number viseJawHeight?: number parallelsHeight?: number workholdingConfigured?: boolean latheTurret?: "rear" | "front" chuckType?: "3-jaw" | "4-jaw" | "collet" noseRadius?: number gripLength?: number tailstock?: boolean stockBore?: number printerKinematics?: "cartesian" | "corexy" | "bed-slinger" | "delta" buildHeight?: number originType?: "workpiece-center" | "workpiece-corner" | "workpiece-corner2" | "machine-zero" | "custom" originX?: number originY?: number originZ?: number } geometry?: { geometryType?: "rectangle" | "circle" | "polygon" | "custom" | "selected" | "cube" | "sphere" | "cylinder" | "cone" | "extrude" | "line" | "pyramid" | "hemisphere" | "ellipsoid" | "capsule" | "triangle" | "ellipse" | "prism" rectangleWidth?: number rectangleHeight?: number circleRadius?: number polygonSides?: number polygonRadius?: number customPath?: string selectedElements?: object[] stock?: { width: number height: number depth: number radius?: number x?: number y?: number topZ?: number allowance?: number material?: string elementId?: string } } }
200 objekt application/json
{ parameters?: { depth: number stepdown: number operationType: "contour" | "pocket" | "drill" | "engrave" | "profile" | "threading" | "3d_surface" | "probing" | "multiaxis" | "facing" | "turning" | "boring" | "threading" | "grooving" | "parting" | "knurling" | "standard" | "vase" | "support" | "infill" | "raft" | "brim" } suggestions: string[] feedback: string statistics: { cuttingSpeed: number chipLoad: number materialRemovalRate: number effectiveStepover: number } operation: { title: string description: string } warnings: string[] }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
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/toolpaths/suggest`, {
method: "POST",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request POST "${CADCAMFUN_URL}/api/toolpaths/suggest" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/toolpaths/parse
toolpathGenerator.parse Erfordert Authorization: Bearer <token>.
{ gcode: string name?: string }
200 objekt application/json
{ warnings: string[] stats: { lines: number cutLength: number rapidLength: number minZ: number maxZ: number estimatedSeconds: number bounds: { min: { x: number y: number z: number } max: { x: number y: number z: number } } } program: { name: string units: "mm" | "inch" workOffset: "G54" | "G55" | "G56" | "G57" | "G58" | "G59" toolpaths: Array<{ id: string name: string toolId: string spindleRpm: number coolant: "off" | "flood" | "mist" moves: Array<{ _tag: "Rapid" to: { x: number y: number z: number } rotary?: { a?: number b?: number c?: number } expr?: { x?: unknown y?: unknown z?: unknown feed?: unknown } } | { _tag: "Linear" to: { x: number y: number z: number } feed: number rotary?: { a?: number b?: number c?: number } expr?: { x?: unknown y?: unknown z?: unknown feed?: unknown } } | { _tag: "Arc" to: { x: number y: number z: number } center: { x: number y: number } clockwise: boolean feed: number } | { _tag: "Dwell" seconds: number } | { _tag: "Comment" text: string } | { _tag: "Cycle" cycle: "drill" | "dwell" | "peck" | "chipBreak" | "tap" | "ream" | "bore" to: { x: number y: number z: number } feed: number peckDepth: number dwellSeconds: number retractHeight: number pitch?: number } | { _tag: "Orient" a?: number b?: number c?: number } | { _tag: "Assign" variable: { scope: "local" | "global" | "system" index: number } | { name: string } value: unknown } | { _tag: "MacroCall" name: string args: object } | { _tag: "If" condition: { cmp: "eq" | "ne" | "lt" | "le" | "gt" | "ge" a: unknown b: unknown } } | { _tag: "Else" } | { _tag: "EndIf" } | { _tag: "While" condition: { cmp: "eq" | { _tag: "EndWhile" } | { _tag: "Label" name: string } | { _tag: "Goto" label: string direction?: "auto" | "forward" | "backward" condition?: { cmp: "eq" | { _tag: "CycleBegin" family: "heidenhain" number: number name: string params: { [key: string]: number } } | { _tag: "CycleEnd" } | { _tag: "Message" text: string }> operation?: { id: string name: string } }> metadata?: { [key: string]: string } } motion?: { paths: Array<{ count: number runs: Array<{ start: number spindle: "cw" | "ccw" | "off" rpm: number css: boolean plane: 17 | 18 | 19 xMode: "diameter" | "radius" tool?: number coolant: "off" | "flood" | "mist" feedMode: "min" | "rev" probe?: boolean }> extrude?: number[] lines?: number[] rpm?: number[] retracts?: number[] homes?: number[] }> unsupported: Array<{ line: number word: string }> } }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
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}` },
})
// ToolpathGeneratorParseInput
const result = await client.toolpathGenerator.parse({
gcode: "",
name: ""
}) curl
curl --request POST "${CADCAMFUN_URL}/api/toolpaths/parse" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/toolpaths/verify
toolpathGenerator.verify Erfordert Authorization: Bearer <token>.
{ gcode?: string program?: { name: string units: "mm" | "inch" workOffset: "G54" | "G55" | "G56" | "G57" | "G58" | "G59" toolpaths: Array<{ id: string name: string toolId: string spindleRpm: number coolant: "off" | "flood" | "mist" moves: Array<{ _tag: "Rapid" to: { x: number y: number z: number } rotary?: { a?: number b?: number c?: number } expr?: { x?: unknown y?: unknown z?: unknown feed?: unknown } } | { _tag: "Linear" to: { x: number y: number z: number } feed: number rotary?: { a?: number b?: number c?: number } expr?: { x?: unknown y?: unknown z?: unknown feed?: unknown } } | { _tag: "Arc" to: { x: number y: number z: number } center: { x: number y: number } clockwise: boolean feed: number } | { _tag: "Dwell" seconds: number } | { _tag: "Comment" text: string } | { _tag: "Cycle" cycle: "drill" | "dwell" | "peck" | "chipBreak" | "tap" | "ream" | "bore" to: { x: number y: number z: number } feed: number peckDepth: number dwellSeconds: number retractHeight: number pitch?: number } | { _tag: "Orient" a?: number b?: number c?: number } | { _tag: "Assign" variable: { scope: "local" | "global" | "system" index: number } | { name: string } value: unknown } | { _tag: "MacroCall" name: string args: object } | { _tag: "If" condition: { cmp: "eq" | "ne" | "lt" | "le" | "gt" | "ge" a: unknown b: unknown } } | { _tag: "Else" } | { _tag: "EndIf" } | { _tag: "While" condition: { cmp: "eq" | { _tag: "EndWhile" } | { _tag: "Label" name: string } | { _tag: "Goto" label: string direction?: "auto" | "forward" | "backward" condition?: { cmp: "eq" | { _tag: "CycleBegin" family: "heidenhain" number: number name: string params: { [key: string]: number } } | { _tag: "CycleEnd" } | { _tag: "Message" text: string }> operation?: { id: string name: string } }> metadata?: { [key: string]: string } } stock: { minX: number maxX: number minY: number maxY: number minZ: number maxZ: number } tool: { kind?: "endmill" | "ballnose" | "drill" | "vbit" | "facemill" diameter: number cuttingLength?: number shankDiameter?: number stickout?: number holderDiameter?: number holderLength?: number angle?: number tipRadius?: number } fixtures?: Array<{ id: string bounds: { minX: number maxX: number minY: number maxY: number minZ: number maxZ: number } }> target?: { solids: Array<{ _tag: "Box" origin: { x: number y: number z: number } size: { x: number y: number z: number } } | { _tag: "Cylinder" origin: { x: number y: number z: number } radius: number height: number segments: number axis?: "z" | "x" | "y" } | { _tag: "Sphere" center: { x: number y: number z: number } radius: number rings: number } | { _tag: "Cone" origin: { x: number y: number z: number } baseRadius: number topRadius: number height: number segments: number axis?: "z" | { _tag: "Torus" center: { x: number y: number z: number } majorRadius: number minorRadius: number rotation?: number majorSegments: number minorSegments: number axis?: "z" | { _tag: "Extrude" profile: Array<{ x: number y: number }> height: number origin?: { x: number y: number z: number } } | { _tag: "Revolve" profile: Array<{ x: number y: number }> angle: number segments?: number }> meshes?: Array<{ positions: number[] indices: number[] }> reliefs?: Array<{ x: number y: number radius: number bottom: number reason: string }> } resolution?: number tolerance?: number start?: { x: number y: number z: number } }
200 objekt application/json
{ ok: boolean issues: Array<{ code: "InvalidInput" | "InterpreterWarning" | "RapidInMaterial" | "ShankCollision" | "HolderCollision" | "FixtureCollision" | "BelowStock" | "Gouge" | "UncutStock" | "ResolutionCoarsened" severity: "error" | "warning" | "info" message: string line?: number point?: { x: number y: number z: number } count: number fixtureId?: string }> stats: { cellSize: number cellsX: number cellsY: number samples: number stockVolume: number removedVolume: number remainingVolume: number engagedLength: number airCutLength: number gougeVolume?: number maxGouge?: number uncutVolume?: number maxUncut?: number } preview: { nx: number ny: number minX: number minY: number cellX: number cellY: number minZ: number maxZ: number heights: number[] gouge: number[] } }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
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}` },
})
// ToolpathGeneratorVerifyInput
const result = await client.toolpathGenerator.verify({
gcode: "",
program: {
name: "",
units: "mm",
workOffset: "G54",
toolpaths: [
{
id: "",
name: "",
toolId: "",
spindleRpm: 0,
coolant: "off",
moves: [
{
_tag: "Rapid",
to: {
x: null,
y: null,
z: null
}
}
]
}
]
},
stock: {
minX: 0,
maxX: 0,
minY: 0,
maxY: 0,
minZ: 0,
maxZ: 0
},
tool: {
diameter: 0
},
fixtures: [
{
id: "",
bounds: {
minX: 0,
maxX: 0,
minY: 0,
maxY: 0,
minZ: 0,
maxZ: 0
}
}
],
target: {
solids: [
{
_tag: "Box",
origin: {
x: 0,
y: 0,
z: 0
},
size: {
x: 0,
y: 0,
z: 0
}
}
]
},
resolution: 0,
tolerance: 0,
start: {
x: 0,
y: 0,
z: 0
}
}) curl
curl --request POST "${CADCAMFUN_URL}/api/toolpaths/verify" \
--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 }
InternalErrorEncoded{ _tag: "InternalError" message: string }
Ich rufe diese Gruppe an
Vorgangs-IDs haben die Form toolpathGenerator.<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. |