الوثائق
بالقطع
التصنيع الأصلي، وإنشاء كود G المعتمد على الإعدادات، والاقتراحات، والتحليل، والتحقق من إعادة التشغيل.
مترجم تلقائيًا من الإنجليزية. عرض الأصل بالإنجليزية
أرسل هذه الطلبات إلى السايدكار الخاصة بك. تبقى القيم في هذا المتصفح.
كيف يعمل هذا
يستمع السايدكار إلى منفذ الاسترجاع الذي تم اختياره عند بدء التشغيل ويطبعه في منفذ الاسترجاع الخاص به ready خط؛ استخدم عنوان URL هذا و CADCAMFUN_TOKEN لقد بدأ مع. تذهب الطلبات مباشرة من هذه الصفحة إلى هذا العنوان.
يرسل السايدكار رؤوس CORS فقط إلى أصول Tauri وإلى http://localhost أو http://127.0.0.1 على أي منفذ. من المستندات المستضافة، يحظر المتصفح الاستجابة، لذا قم بتشغيل المستندات محليًا (bun run dev في packages/web) لاستخدام الملعب، أو نسخ الطلب كحليقة. للتجربة دون لمس البيانات الحقيقية، ابدأ تشغيل السايدكار باستخدام CADCAMFUN_DATA_DIR أشار إلى دليل مهمل - انظر إرشادات واجهة برمجة التطبيقات.
العمليات
5 نقاط نهاية في toolpathGenerator المجموعة التي تم إنشاؤها من السايدكار مستند OpenAPI. تأخذ العمليات المحمية Authorization: Bearer $CADCAMFUN_TOKEN; يرى المصادقة. السلوك والحدود موجودة دليل النظام الفرعي.
| بريد | /api/toolpaths/manufacture | toolpathGenerator.manufacture |
| بريد | /api/toolpaths/generate | toolpathGenerator.generate |
| بريد | /api/toolpaths/suggest | toolpathGenerator.suggest |
| بريد | /api/toolpaths/parse | toolpathGenerator.parse |
| بريد | /api/toolpaths/verify | toolpathGenerator.verify |
/api/toolpaths/manufacture
toolpathGenerator.manufacture يتطلب 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 كائن | هدف 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
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 جربه
/api/toolpaths/generate
toolpathGenerator.generate يتطلب 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 هدف 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
جلب المثال
// 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 جربه
/api/toolpaths/suggest
toolpathGenerator.suggest يتطلب 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 هدف 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
جلب المثال
// 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 جربه
/api/toolpaths/parse
toolpathGenerator.parse يتطلب Authorization: Bearer <token>.
{ gcode: string name?: string }
200 هدف 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
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 جربه
/api/toolpaths/verify
toolpathGenerator.verify يتطلب 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 هدف 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
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 جربه
المخططات
يمكن الوصول إلى المخططات المسماة من معلمات هذه المجموعة وأجسامها واستجاباتها. أ ? يمثل حقلاً اختياريًا؛ | null يضع علامة على الحقل الذي قد يكون موجودًا بقيمة فارغة.
BadRequestEncoded{ _tag: "BadRequest" message: string }
InternalErrorEncoded{ _tag: "InternalError" message: string }
استدعاء هذه المجموعة
معرفات العملية لها النموذج toolpathGenerator.<name>. وعد SDK الذي تم إنشاؤه (@cadcamfun/api/sdk) يعرض معظمهم client.<namespace>.<method>(input)، أين input هو كائن مسطح واحد من معلمات المسار وحقول النص؛ يُظهر مثال SDK لكل بطاقة الملحق الدقيق ونوع الإدخال. لا يتم إنشاء التحميلات متعددة الأجزاء والاستجابات الثنائية أو استجابات JavaScript وخطافات الويب الأولية؛ تظهر تلك البطاقات fetch بدلاً من ذلك.
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
}
} استكشاف الأخطاء وإصلاحها
| أعراض | السبب المحتمل | يصلح |
|---|---|---|
| 401 في كل طلب | رمز مميز من إطلاق سابق، أو مفقود Bearer بادئة | يرسل Authorization: Bearer <token> بالرمز المميز الذي بدأت به السايدكار. |
| 400 قبل أن يحدث أي شيء | النص أو المعلمة لا يتطابقان مع المخطط | قارن الحمولة بمخطط الطلب الموجود على البطاقة. |
| 403 أو 404 لسجل يمكنك رؤيته في مكان آخر | حساب التمثيل يختلف | أرسل الحق x-session-tokenأو استخدم ملف التعريف المحلي الذي يملك السجل. |
| 409 | حالة متعارضة، مثل اسم مكرر أو رأس فرع قديم | أعد قراءة المورد وأعد المحاولة باستخدام البيانات الحالية. |
| جربه يقول "تم حظره بواسطة CORS" | يتم تقديم المستندات من أصل غير استرجاعي | قم بتشغيل المستندات محليًا أو انسخ الطلب كـ curly. |
| رفض اتصال | تم إعادة تشغيل السايدكار في منفذ جديد | قراءة المنفذ من الجديد ready سطر. |