Zum Hauptinhalt springen
← CutOptim Engine APINesting-API · POST /v1/optimize/nest

Nesting-API

Die Nesting-API von CutOptim platziert Freiformteile über reines HTTP auf Tafeln. Sie senden die Konturen — als Koordinaten oder als DXF- und SVG-Dateien — und Ihre Tafeln als JSON an POST /v1/optimize/nest; die Antwort enthält Position und Drehung jedes Teils, die Tafelzahl, Schnittlänge und Einstiche und auf Wunsch das fertige Layout als DXF und SVG.

Es ist die True-Shape-Engine, mit der auch die CutOptim-App arbeitet: standardmäßig sofort und deterministisch, mit einer asynchronen max-Suche, wenn ein längerer Durchlauf eine Tafel sparen kann. Schlüssel gibt es per Self-Service, die Preise sind öffentlich, und POST /v1/validate/nest prüft eine Anfrage kostenlos und ohne Schlüssel.

Ein echter Aufruf, gezeichnet aus seiner Antwort

Vier Teiletypen — ein L-Winkel, ein Knotenblech, eine Platte mit Langloch und ein Flansch, der als SVG-Datei geschickt wird — auf einer Tafel mit einer Spannzone, die die Teile meiden müssen. Die Anfrage unten ist ein Auszug des echten Bodys; die Tafel ist aus den Koordinaten gezeichnet, die die Engine zurückgegeben hat.

Anfrage (Auszug) · POST /v1/optimize/nest
{
  "parts": [
    { "name": "bracket", "polygon": […], "qty": 12, … },
    { "name": "gusset", "polygon": […], "qty": 14, … },
    { "name": "plate", "polygon": […], "holes": […], "qty": 12, … },
    { "name": "flange", "source": { … }, "qty": 10, … }
  ],
  "stock": [{ "w": 2500, "h": 1250, "exclusions": […], … }],
  "options": { "minSeparation": 5, "edgeClearance": 10 }
}
Antwort, gezeichnet aus sheets[].parts
Platten
1
sheetCount
Füllgrad
56,32 %
density
Platzierte Teile
48 / 48
placed
Schnittlänge
49.463
cutLength
Einstiche
110
pierces

Lasergeschnittene Stahlteile: drei als Koordinaten, der Flansch als SVG-Datei (source). Jedes Teil bleibt außerhalb der Spannzone (exclusions) und hält den geforderten Abstand (minSeparation).

Was die Nesting-API kann

  • True-Shape-Nesting beliebiger Polygone mit Innenausschnitten; Teile greifen in die konkaven Taschen anderer Teile — 6 Tafeln, wo dieselben Teile nach Umrissrechteck 9 brauchen.
  • Teile als Koordinaten oder als Datei: ein SVG- oder DXF-Dokument in parts[].source, oder eine Zeichnung mit vielen Teilen über POST /v1/import/nest aufteilen. Nichts wird gespeichert.
  • Drehung pro Teil: eine Liste erlaubter Winkel in allowedRotations oder "continuous".
  • Tafeln als Rechtecke oder Polygone, mit Sperr- und Minderqualitätszonen (stock[].exclusions), Teileabstand (options.minSeparation) und eigenem Randabstand (options.edgeClearance).
  • Mehrere Tafelformate mit Preisen: die Engine wählt die günstigste Kombination, und mit options.respectStock werden bei begrenztem Bestand Pflichtteile (parts[].priority) zuerst platziert.
  • Materialbewusst: ein Teil mit Materialangabe wird nur auf Tafeln dieses Materials geschachtelt.
  • Layout-Dateien in der Antwort: include:["svg","dxf"] liefert die belegten Tafeln als SVG und als DXF mit den Layern STOCK, PARTS, HOLES und ZONES.

Sofort oder gründlich: lbf und max

Die Standard-Engine lbf antwortet innerhalb der HTTP-Anfrage und liefert für dieselbe Eingabe immer dasselbe Layout — der Plan hinter dem Angebot ist der Plan hinter dem Auftrag. Mit engine: "max" läuft der Job asynchron: Sie erhalten eine Job-ID, fragen GET /v1/jobs/{id} ab, und die Suche nutzt options.timeBudgetMs, um ein Layout mit weniger Tafeln zu finden. Sie liefert nie etwas Schlechteres als lbf und meldet deterministic: false, weil eine zeitbegrenzte Suche zwischen Läufen abweichen kann. Jobs mit Sperrzonen oder Polygon-Tafeln bedient lbf, mit einer Warnung.

Koordinaten oder CAD-Dateien senden

Ein Teil ist eine Kontur: ein Polygon in einer Einheit Ihrer Wahl, optional mit Löchern, und jede Koordinate der Antwort kommt in derselben Einheit zurück. Liegen Ihre Teile in Zeichnungen, senden Sie die Zeichnung — parts[].source nimmt ein SVG- oder DXF-Dokument, und der Server liest Kontur und Löcher mit demselben Parser wie die CutOptim-App. Eine Datei mit vielen Teilen läuft zuerst durch POST /v1/import/nest, das eine Kontur pro Teil zurückgibt.

Was zurückkommt

Jede belegte Tafel listet ihre Teile als starre Transformation — name, x, y und rotation — Sie drehen also Ihre eigene Kontur und verschieben sie; nichts wird neu angenähert. Dazu kommen sheetCount, density, placed und total, cutLength und pierces für die Maschinenzeit, totalPrice, wenn Tafeln einen Preis tragen, stockUsage je Tafelformat und unplaced für alles, was nicht passte, mit dem Grund in warnings. Mit include:["svg","dxf"] kommen die Zeichnungen in derselben Antwort.

Pakete und Limits

Studio kostet 49 € im Monat für 3.000 Anfragen, Scale 149 € im Monat für 10.000 Anfragen; die Preise sind netto. Das Monatslimit ist eine feste Obergrenze pro Konto ohne Mehrkosten, und das verbleibende Kontingent kommt in einem Response-Header und über GET /v1/usage zurück. Mit einem kostenlosen Testschlüssel bauen Sie die Integration, bevor Sie zahlen, und POST /v1/validate/nest prüft jede Anfrage ohne Schlüssel und ohne Kontingent.

Was sie (noch) nicht kann

Das sagen wir lieber hier als im Verkaufsgespräch. Die Engine schachtelt Teile nach ihrer Außenkontur: Sie setzt keine kleinen Teile in die Löcher größerer (Teil-in-Teil), fasst gemeinsame Kanten nicht zu einem Schnitt zusammen (Common-Line) und schreibt keinen G-Code — Sie erhalten Positionen, Schnittlänge und Einstichzahl sowie DXF- oder SVG-Dateien für Ihr eigenes CAM. Sie ist ein Webdienst; es gibt keine Bibliothek zum Installieren.

Aus Ihrem Code aufrufen

Dieselbe kleine Anfrage in drei Sprachen: zwei Teiletypen, ein Tafelformat mit Preis, 5 mm Abstand, und das Layout zurück als SVG und DXF. Ersetzen Sie den Schlüssel durch Ihren eigenen.

curl
curl https://api.cutoptim.com/v1/optimize/nest \
  -H "Authorization: Bearer co_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "parts": [
      { "name": "bracket", "polygon": [[0,0],[300,0],[300,100],[100,100],[100,300],[0,300]], "qty": 12, "allowedRotations": [0,90,180,270] },
      { "name": "plate", "polygon": [[0,0],[240,0],[240,160],[0,160]], "holes": [[[60,65],[180,65],[180,95],[60,95]]], "qty": 8 }
    ],
    "stock": [{ "w": 2500, "h": 1250, "price": 96 }],
    "options": { "minSeparation": 5 },
    "include": ["svg", "dxf"]
  }'
Python
import requests

body = {
  "parts": [
    { "name": "bracket", "polygon": [[0,0],[300,0],[300,100],[100,100],[100,300],[0,300]], "qty": 12, "allowedRotations": [0,90,180,270] },
    { "name": "plate", "polygon": [[0,0],[240,0],[240,160],[0,160]], "holes": [[[60,65],[180,65],[180,95],[60,95]]], "qty": 8 }
  ],
  "stock": [{ "w": 2500, "h": 1250, "price": 96 }],
  "options": { "minSeparation": 5 },
  "include": ["svg", "dxf"]
}
r = requests.post("https://api.cutoptim.com/v1/optimize/nest",
                  headers={"Authorization": "Bearer co_live_…"}, json=body, timeout=30)
plan = r.json()
print(plan["metrics"]["sheetCount"], len(plan["sheets"]))
open("nest.dxf", "w").write(plan["dxf"])
JavaScript
const body = {
  "parts": [
    { "name": "bracket", "polygon": [[0,0],[300,0],[300,100],[100,100],[100,300],[0,300]], "qty": 12, "allowedRotations": [0,90,180,270] },
    { "name": "plate", "polygon": [[0,0],[240,0],[240,160],[0,160]], "holes": [[[60,65],[180,65],[180,95],[60,95]]], "qty": 8 }
  ],
  "stock": [{ "w": 2500, "h": 1250, "price": 96 }],
  "options": { "minSeparation": 5 },
  "include": ["svg", "dxf"]
};
const r = await fetch("https://api.cutoptim.com/v1/optimize/nest", {
  method: "POST",
  headers: { "Authorization": "Bearer co_live_…", "Content-Type": "application/json" },
  body: JSON.stringify(body),
});
const plan = await r.json();
console.log(plan.metrics.sheetCount, plan.sheets.length);

Nach Branche

Derselbe Endpunkt, für zwei Gewerke erklärt:

FAQ

Gibt es eine kostenlose Nesting-API?
Die gesamte Integration können Sie kostenlos bauen und testen: ein Testschlüssel kostet nichts, und POST /v1/validate/nest prüft jede Anfrage ohne Schlüssel und ohne Kontingent. Produktiver Verkehr läuft über ein bezahltes Paket mit festem Monatspreis.
Kann ich DXF- oder SVG-Dateien statt Koordinaten senden?
Ja. Legen Sie die Zeichnung in parts[].source, und der Server liest Kontur und Löcher daraus. Eine Datei mit vielen Teilen läuft über POST /v1/import/nest, das eine Kontur pro Teil zurückgibt. Dateien werden im Speicher verarbeitet und nicht gespeichert.
Arbeitet die Nesting-API synchron oder asynchron?
Beides. Die Standard-Engine lbf antwortet innerhalb der Anfrage, deterministisch. engine: "max" läuft als Hintergrund-Job, den Sie mit GET /v1/jobs/{id} abfragen; er nutzt options.timeBudgetMs für die Suche nach weniger Tafeln und liefert nie ein schlechteres Layout als lbf.
Unterstützt sie Teil-in-Teil-Nesting?
Noch nicht. Teile werden nach ihrer Außenkontur geschachtelt, ein kleines Teil landet also nicht im Loch eines größeren. Es steht auf unserer Roadmap; bis dahin bleibt die Fläche großer Ausschnitte im Layout leer.
Unterstützt sie Common-Line-Schnitte oder erzeugt sie G-Code?
Nein. Die Antwort enthält Position und Drehung jedes Teils, die Schnittlänge, die Zahl der Einstiche und das Layout als DXF oder SVG, das Ihr CAM oder Ihre Maschinensoftware in ein Schneidprogramm umsetzt.
Wie wird die Nesting-API abgerechnet?
Nach Paket, nicht nach Teilezahl: Studio kostet 49 € im Monat für 3.000 Anfragen, Scale 149 € im Monat für 10.000 Anfragen, netto. Das Limit ist eine feste monatliche Obergrenze pro Konto ohne Mehrkosten.
Liefert dieselbe Anfrage immer dasselbe Layout?
Mit der Standard-Engine lbf ja — dieselbe Eingabe ergibt dieselbe Ausgabe, Sie können Ergebnisse also cachen und vergleichen. Die asynchrone max-Suche ist zeitbegrenzt und meldet das mit deterministic: false in der Antwort.

Benchmarks · API-Referenz lesen →