Aller au contenu
CADCAMFUN
Docs

Documentation

Usinage

Fabrication native, génération de code G basée sur les paramètres, suggestions, analyse et vérification de la relecture.

Traduit automatiquement de l'anglais. Voir l'original en anglais

Playground

Envoyez ces demandes à votre propre sidecar en cours d’exécution. Les valeurs restent dans ce navigateur.

Non connecté
Comment ça marche

Le sidecar écoute sur un port de bouclage choisi au démarrage et l'imprime dans son ready doubler; utilisez cette URL et le CADCAMFUN_TOKEN ça a commencé avec. Les demandes vont directement de cette page à cette adresse.

Le sidecar envoie les en-têtes CORS uniquement aux origines Tauri et à http://localhost ou http://127.0.0.1 sur n'importe quel port. À partir des documents hébergés, le navigateur bloque la réponse, exécutez donc les documents localement (bun run dev dans packages/web) pour utiliser le terrain de jeu, ou copiez la requête sous forme curl. Pour expérimenter sans toucher aux données réelles, démarrez le sidecar avec CADCAMFUN_DATA_DIR pointé vers un répertoire jetable — voir la procédure pas à pas de l'API.

Opérations

5 endpoints dans le toolpathGenerator groupe, généré à partir du propre sidecar Document OpenAPI. Les opérations protégées prennent Authorization: Bearer $CADCAMFUN_TOKEN; voir authentification. Le comportement et les limites sont en place le guide du sous-système.

poste /api/toolpaths/manufacture toolpathGenerator.manufacture
poste /api/toolpaths/generate toolpathGenerator.generate
poste /api/toolpaths/suggest toolpathGenerator.suggest
poste /api/toolpaths/parse toolpathGenerator.parse
poste /api/toolpaths/verify toolpathGenerator.verify
Opérations d'usinage en 3D Faites glisser vers l'orbite · faites défiler pour zoomer · faites glisser vers la droite pour effectuer un panoramique
Un bloc par opération (5), empilé par section de ressources de cette page et coloré par méthode : vert GET, orange POST, bleu PUT, violet PATCH, rouge DELETE. Généré à partir du document OpenAPI au moment de la construction.

/api/toolpaths/manufacture

poste /api/toolpaths/manufacture # toolpathGenerator.manufacture

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · 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
  }
}
Réponses
200 objet | objet 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
Exemple de SDK
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/fabrication
curl --request POST "${CADCAMFUN_URL}/api/toolpaths/manufacture" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le

/api/toolpaths/generate

poste /api/toolpaths/generate # toolpathGenerator.generate

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · 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
  }
}
Réponses
200 objet 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
récupérer un exemple
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
Essayez-le

/api/toolpaths/suggest

poste /api/toolpaths/suggest # toolpathGenerator.suggest

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · 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
    }
  }
}
Réponses
200 objet 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
récupérer un exemple
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/suggérer
curl --request POST "${CADCAMFUN_URL}/api/toolpaths/suggest" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le

/api/toolpaths/parse

poste /api/toolpaths/parse # toolpathGenerator.parse

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  gcode: string
  name?: string
}
Réponses
200 objet 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
Exemple de SDK
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
Essayez-le

/api/toolpaths/verify

poste /api/toolpaths/verify # toolpathGenerator.verify

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · 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
  }
}
Réponses
200 objet 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
Exemple de SDK
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
Essayez-le

Schémas

Schémas nommés accessibles à partir des paramètres, des corps et des réponses de ce groupe. UN ? marque un champ facultatif ; | null marque un champ qui peut être présent avec une valeur nulle.

BadRequestEncoded
{
  _tag: "BadRequest"
  message: string
}
InternalErrorEncoded
{
  _tag: "InternalError"
  message: string
}
UnauthorizedEncoded
{
  _tag: "Unauthorized"
  message: string
}

Appel à ce groupe

Les identifiants d'opération ont la forme toolpathGenerator.<name>. Le SDK Promise généré (@cadcamfun/api/sdk) expose la plupart d'entre eux comme client.<namespace>.<method>(input), où input est un objet plat composé de paramètres de chemin et de champs de corps ; L'exemple de SDK de chaque carte montre l'accesseur exact et le type d'entrée. Les téléchargements en plusieurs parties, les réponses binaires ou JavaScript et les webhooks bruts ne sont pas générés ; ces cartes montrent fetch à la place.

Erreurs du SDK Promise
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
  }
}

Dépannage

SymptômeCause probableRéparer
401 à chaque appelJeton d'un lancement précédent, ou manquant Bearer préfixeEnvoyer Authorization: Bearer <token> avec le jeton avec lequel le sidecar a été démarré.
400 avant que quoi que ce soit se produiseLe corps ou le paramètre ne correspond pas au schémaComparez la charge utile avec le schéma de demande sur la carte.
403 ou 404 sur un enregistrement visible ailleursLe compte intérimaire diffèreEnvoyez le droit x-session-token, ou utilisez le profil local propriétaire de l'enregistrement.
409État conflictuel, tel qu'un nom en double ou un chef de succursale obsolèteRelisez la ressource et réessayez avec les données actuelles.
Essayez, il est écrit "bloqué par CORS"Les documents sont servis à partir d'une origine sans bouclageExécutez la documentation localement ou copiez la demande en tant que curl.
Connexion rejetéeLe sidecar a redémarré sur un nouveau portLire le port du nouveau ready ligne.