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.
{
"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 }
}- 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 überPOST /v1/import/nestaufteilen. Nichts wird gespeichert. - Drehung pro Teil: eine Liste erlaubter Winkel in
allowedRotationsoder "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.respectStockwerden 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 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"]
}'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"])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:
True-Shape-Nesting unregelmäßiger Polygone, mit Ausschlusszonen.
True-Shape-Nesting auf Tafeln für Laser, Plasma oder Wasserstrahl.
FAQ
Gibt es eine kostenlose Nesting-API?
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?
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?
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?
Unterstützt sie Common-Line-Schnitte oder erzeugt sie G-Code?
Wie wird die Nesting-API abgerechnet?
Liefert dieselbe Anfrage immer dasselbe Layout?
deterministic: false in der Antwort.