Zum Inhalt springen
CADCAMFUN
Doku

Dokumentation

Bearbeitung

Native Herstellung, einstellungsgesteuerte G-Code-Generierung, Vorschläge, Parsing und Wiedergabeüberprüfung.

Automatisch aus dem Englischen übersetzt. Englisches Original ansehen

Playground

Senden Sie diese Anfragen an Ihren eigenen laufenden Sidecar. Werte bleiben in diesem Browser.

Nicht verbunden
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
Bearbeitungsvorgänge in 3D Zum Orbit ziehen · zum Zoomen scrollen · zum Schwenken mit der rechten Maustaste ziehen
Ein Block pro Vorgang (5), gestapelt pro Ressourcenabschnitt dieser Seite und nach Methode gefärbt: grün GET, orange POST, blau PUT, violett PATCH, rot DELETE. Wird zur Erstellungszeit aus dem OpenAPI-Dokument generiert.

/api/toolpaths/manufacture

post /api/toolpaths/manufacture # toolpathGenerator.manufacture

Erfordert Authorization: Bearer <token>.

Anforderungstext · erforderlich · application/json
{
  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
  }
}
Antworten
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
toolpathGenerator.manufacture
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
POST /api/toolpaths/manufacture
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

post /api/toolpaths/generate # toolpathGenerator.generate

Erfordert Authorization: Bearer <token>.

Anforderungstext · erforderlich · application/json
{
  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
  }
}
Antworten
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
toolpathGenerator.generate
// 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
POST /api/toolpaths/generate
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

post /api/toolpaths/suggest # toolpathGenerator.suggest

Erfordert Authorization: Bearer <token>.

Anforderungstext · erforderlich · application/json
{
  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
    }
  }
}
Antworten
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
toolpathGenerator.suggest
// 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
POST /api/toolpaths/suggest
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

post /api/toolpaths/parse # toolpathGenerator.parse

Erfordert Authorization: Bearer <token>.

Anforderungstext · erforderlich · application/json
{
  gcode: string
  name?: string
}
Antworten
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
toolpathGenerator.parse
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
POST /api/toolpaths/parse
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

post /api/toolpaths/verify # toolpathGenerator.verify

Erfordert Authorization: Bearer <token>.

Anforderungstext · erforderlich · application/json
{
  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
  }
}
Antworten
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
toolpathGenerator.verify
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
POST /api/toolpaths/verify
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
}
UnauthorizedEncoded
{
  _tag: "Unauthorized"
  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.

Fehler vom Promise SDK
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

SymptomWahrscheinliche UrsacheFix
401 bei jedem AufrufToken von einem früheren Start oder fehlt Bearer präfixSchicken Authorization: Bearer <token> mit dem Token wurde der Sidecar gestartet.
400 bevor etwas passiertText oder Parameter stimmen nicht mit dem Schema übereinVergleichen Sie die Nutzlast mit dem Anforderungsschema auf der Karte.
403 oder 404 bei einem Datensatz, den du woanders siehstDas amtierende Konto ist unterschiedlichSchicken Sie das Richtige x-session-token, oder verwenden Sie das lokale Profil, das Eigentümer des Datensatzes ist.
409Widersprüchlicher Status, z. B. ein doppelter Name oder ein veralteter ZweigkopfLesen 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 bereitgestelltFühren Sie die Dokumente lokal aus oder kopieren Sie die Anfrage als Curl.
Verbindung abgelehntDer Sidecar wurde an einem neuen Port neu gestartetLesen Sie den Port neu ready Zeile.