Vai al contenuto
CADCAMFUN
Documentazione

Documentazione

Lavorazione

Produzione nativa, generazione di codici G basata sulle impostazioni, suggerimenti, analisi e verifica della riproduzione.

Tradotto automaticamente dall'inglese. Vedi l'originale in inglese

Playground

Invia queste richieste al tuo sidecar in corsa. I valori rimangono in questo browser.

Non connesso
Come funziona

Il sidecar resta in ascolto su una porta di loopback scelta all'avvio e la stampa nel suo file ready linea; usa quell'URL e il file CADCAMFUN_TOKEN è stato iniziato con. Le richieste vanno direttamente da questa pagina a quell'indirizzo.

Il sidecar invia intestazioni CORS solo alle origini Tauri e a http://localhost o http://127.0.0.1 su qualsiasi porto. Dai documenti ospitati il browser blocca la risposta, quindi esegui i documenti localmente (bun run dev in packages/web) per utilizzare il parco giochi, oppure copiare la richiesta come ricciolo. Per sperimentare senza toccare i dati reali, avvia il sidecar con CADCAMFUN_DATA_DIR indicato in una directory usa e getta - vedi la procedura dettagliata dell'API.

Operazioni

5 endpoint nel toolpathGenerator gruppo, generato da quello del sidecar Documento OpenAPI. Le operazioni protette richiedono Authorization: Bearer $CADCAMFUN_TOKEN; vedere autenticazione. Comportamenti e limiti sono entrati la guida del sottosistema.

inviare /api/toolpaths/manufacture toolpathGenerator.manufacture
inviare /api/toolpaths/generate toolpathGenerator.generate
inviare /api/toolpaths/suggest toolpathGenerator.suggest
inviare /api/toolpaths/parse toolpathGenerator.parse
inviare /api/toolpaths/verify toolpathGenerator.verify
Operazioni di lavorazione in 3D Trascina per orbitare · scorri per ingrandire · trascina con il tasto destro per eseguire la panoramica
Un blocco per operazione (5), impilato per sezione di risorse di questa pagina e colorato in base al metodo: verde GET, arancione POST, blu PUT, viola PATCH, rosso DELETE. Generato dal documento OpenAPI in fase di compilazione.

/api/toolpaths/manufacture

inviare /api/toolpaths/manufacture # toolpathGenerator.manufacture

Richiede Authorization: Bearer <token>.

Corpo della richiesta · obbligatorio · 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
  }
}
Risposte
200 oggetto | oggetto 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
Esempio dell'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/percorsi utensile/produzione
curl --request POST "${CADCAMFUN_URL}/api/toolpaths/manufacture" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Provalo

/api/toolpaths/generate

inviare /api/toolpaths/generate # toolpathGenerator.generate

Richiede Authorization: Bearer <token>.

Corpo della richiesta · obbligatorio · 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
  }
}
Risposte
200 oggetto 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
prendere esempio
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
Provalo

/api/toolpaths/suggest

inviare /api/toolpaths/suggest # toolpathGenerator.suggest

Richiede Authorization: Bearer <token>.

Corpo della richiesta · obbligatorio · 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
    }
  }
}
Risposte
200 oggetto 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
prendere esempio
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/percorsi utensile/suggest
curl --request POST "${CADCAMFUN_URL}/api/toolpaths/suggest" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Provalo

/api/toolpaths/parse

inviare /api/toolpaths/parse # toolpathGenerator.parse

Richiede Authorization: Bearer <token>.

Corpo della richiesta · obbligatorio · application/json
{
  gcode: string
  name?: string
}
Risposte
200 oggetto 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
Esempio dell'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
Provalo

/api/toolpaths/verify

inviare /api/toolpaths/verify # toolpathGenerator.verify

Richiede Authorization: Bearer <token>.

Corpo della richiesta · obbligatorio · 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
  }
}
Risposte
200 oggetto 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
Esempio dell'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/percorsi/verifica
curl --request POST "${CADCAMFUN_URL}/api/toolpaths/verify" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Provalo

Schemi

Schemi denominati raggiungibili dai parametri, dai corpi e dalle risposte di questo gruppo. UN ? contrassegna un campo facoltativo; | null contrassegna un campo che può essere presente con un valore nullo.

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

Chiamando questo gruppo

Gli ID operazione hanno il formato toolpathGenerator.<name>. L'SDK Promise generato (@cadcamfun/api/sdk) ne espone la maggior parte come client.<namespace>.<method>(input), dove input è un oggetto piatto di parametri di percorso e campi del corpo; l'esempio dell'SDK di ciascuna scheda mostra l'esatto accessor e il tipo di input. Non vengono generati caricamenti in più parti, risposte binarie o JavaScript e webhook grezzi; quelle carte mostrano fetch invece.

Errori dall'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
  }
}

Risoluzione dei problemi

SintomoProbabile causaAggiustare
401 a ogni chiamataToken di un lancio precedente o mancante Bearer prefissoInviare Authorization: Bearer <token> con il gettone con cui è stato avviato il sidecar.
400 prima che accada qualcosaIl corpo o il parametro non corrisponde allo schemaConfronta il payload con lo schema di richiesta sulla carta.
403 o 404 su un record visibile altroveIl resoconto della recitazione è diversoInvia il diritto x-session-tokenoppure utilizzare il profilo locale proprietario del record.
409Stato in conflitto, ad esempio un nome duplicato o una testa di ramo obsoletaRileggere la risorsa e riprovare con i dati correnti.
Prova, dice "bloccato da CORS"I documenti vengono serviti da un'origine non di loopbackEsegui i documenti localmente o copia la richiesta come curl.
Connessione rifiutataIl sidecar è ripartito su una nuova portaLeggi il porto dal nuovo ready riga.