API do nestingu
API do nestingu CutOptim rozmieszcza detale o dowolnym kształcie na arkuszach przez zwykłe HTTP. Wysyłasz kontury — jako współrzędne albo pliki DXF i SVG — oraz arkusze w JSON do POST /v1/optimize/nest; odpowiedź zawiera pozycję i obrót każdego detalu, liczbę arkuszy, długość cięcia i liczbę przebić, a na życzenie gotowy układ w DXF i SVG.
To ten sam silnik nestingu kształtowego, którego używa aplikacja CutOptim: domyślnie natychmiastowy i deterministyczny, z asynchronicznym wyszukiwaniem max, gdy dłuższe liczenie może zaoszczędzić arkusz. Klucze wydajesz sam, ceny są publiczne, a POST /v1/validate/nest sprawdza żądanie za darmo, bez klucza.
Prawdziwe wywołanie, narysowane z odpowiedzi
Cztery typy detali — kątownik L, węzłówka, płytka z fasolką i kołnierz wysłany jako plik SVG — na jednym arkuszu ze strefą mocowania, której detale muszą unikać. Poniżej fragment prawdziwego body; arkusz narysowano ze współrzędnych zwróconych przez silnik.
{
"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 }
}- Arkusze
- 1
- sheetCount
- Wypełnienie
- 56,32%
- density
- Rozmieszczone elementy
- 48 / 48
- placed
- Długość cięcia
- 49 463
- cutLength
- Przebicia
- 110
- pierces
Stalowe detale cięte laserem: trzy wysłane jako współrzędne, kołnierz jako plik SVG (source). Żaden detal nie wchodzi w strefę docisku (exclusions) i każdy zachowuje zadany odstęp (minSeparation).
Co robi API do nestingu
- Nesting kształtowy dowolnych wielokątów z otworami wewnętrznymi; detale wchodzą we wklęsłe wnęki innych — 6 arkuszy tam, gdzie te same detale liczone prostokątem obrysu potrzebują 9.
- Detale jako współrzędne albo pliki: dokument SVG lub DXF w
parts[].sourcealbo rysunek z wieloma detalami podzielony przezPOST /v1/import/nest. Nic nie jest zapisywane. - Obrót dla każdego detalu: lista dozwolonych kątów w
allowedRotationsalbo "continuous". - Arkusze prostokątne lub wielokątne, ze strefami wykluczonymi i gorszej jakości (
stock[].exclusions), odstępem między detalami (options.minSeparation) i osobnym marginesem od krawędzi (options.edgeClearance). - Kilka formatów arkuszy z cenami: silnik wybiera najtańszą kombinację, a przy ograniczonym zapasie (
options.respectStock) najpierw rozmieszcza detale obowiązkowe (parts[].priority). - Z uwzględnieniem materiału: detal oznaczony materiałem trafia tylko na arkusze z tego materiału.
- Pliki układu w odpowiedzi:
include:["svg","dxf"]zwraca użyte arkusze jako SVG i jako DXF z warstwami STOCK, PARTS, HOLES i ZONES.
Natychmiast albo dokładnie: lbf i max
Domyślny silnik lbf odpowiada w ramach żądania HTTP i dla tych samych danych zawsze zwraca ten sam układ — plan z oferty jest planem z zamówienia. Z engine: "max" zadanie działa asynchronicznie: dostajesz identyfikator zadania i odpytujesz GET /v1/jobs/{id}, a wyszukiwanie przez options.timeBudgetMs szuka układu na mniejszej liczbie arkuszy. Nigdy nie zwraca nic gorszego niż lbf i zgłasza deterministic: false, bo wyszukiwanie z limitem czasu może się różnić między uruchomieniami. Zadanie ze strefami wykluczonymi lub arkuszami wielokątnymi obsługuje lbf, z ostrzeżeniem.
Współrzędne albo pliki CAD
Detal to kontur: wielokąt w wybranej przez ciebie jednostce, z opcjonalnymi otworami, a każda współrzędna odpowiedzi wraca w tej samej jednostce. Jeśli detale są w rysunkach, wyślij rysunek — parts[].source przyjmuje dokument SVG lub DXF, a serwer odczytuje kontur i otwory tym samym parserem, którego używa aplikacja CutOptim. Plik z wieloma detalami przechodzi najpierw przez POST /v1/import/nest, który zwraca jeden kontur na detal.
Co dostajesz z powrotem
Każdy użyty arkusz wymienia swoje detale jako przekształcenie sztywne — name, x, y i rotation — więc obracasz i przesuwasz własny kontur; nic nie jest ponownie przybliżane. Obok układu przychodzą sheetCount, density, placed i total, cutLength i pierces do szacowania czasu maszyny, totalPrice, gdy arkusze mają cenę, stockUsage dla każdego formatu oraz unplaced dla tego, co się nie zmieściło, z powodem w warnings. Z include:["svg","dxf"] rysunki przychodzą w tej samej odpowiedzi.
Plany i limity
Studio kosztuje 49 € miesięcznie za 3000 żądań, Scale 149 € miesięcznie za 10 000 żądań; ceny netto. Miesięczny limit to twardy pułap na konto bez opłat za przekroczenie, a pozostały limit wraca w nagłówku odpowiedzi i z GET /v1/usage. Z darmowym kluczem testowym zbudujesz integrację, zanim zapłacisz, a POST /v1/validate/nest sprawdza każde żądanie bez klucza i bez zużywania limitu.
Czego (jeszcze) nie robi
Wolimy powiedzieć to tutaj niż w rozmowie handlowej. Silnik rozmieszcza detale według zewnętrznego konturu: nie wkłada małych detali w otwory większych (detal w detalu), nie łączy wspólnych krawędzi w jedno cięcie (cięcie wspólną linią) i nie generuje G-kodu — dostajesz pozycje, długość cięcia, liczbę przebić oraz pliki DXF lub SVG dla własnego CAM. To usługa sieciowa; nie ma biblioteki do zainstalowania.
Wywołaj ze swojego kodu
To samo małe żądanie w trzech językach: dwa typy detali, jeden format arkusza z ceną, 5 mm odstępu i układ z powrotem jako SVG i DXF. Zastąp klucz własnym.
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);Według branży
Ten sam endpoint, objaśniony dla dwóch branż:
Nesting kształtów rzeczywistych nieregularnych wielokątów, ze strefami wykluczeń.
Nesting kształtów rzeczywistych na blachach dla lasera, plazmy i strumienia wody.
Najczęstsze pytania
Czy jest darmowe API do nestingu?
POST /v1/validate/nest sprawdza każde żądanie bez klucza i bez limitu. Ruch produkcyjny działa na płatnym planie ze stałą ceną miesięczną.Czy mogę wysłać pliki DXF lub SVG zamiast współrzędnych?
parts[].source, a serwer odczyta z niego kontur i otwory. Plik z wieloma detalami przechodzi przez POST /v1/import/nest, który zwraca jeden kontur na detal. Pliki są przetwarzane w pamięci i nie są zapisywane.Czy API do nestingu działa synchronicznie czy asynchronicznie?
engine: "max" działa jako zadanie w tle, które odpytujesz przez GET /v1/jobs/{id}; przez options.timeBudgetMs szuka mniejszej liczby arkuszy i nigdy nie zwraca gorszego układu niż lbf.Czy obsługuje nesting detal w detalu?
Czy robi cięcie wspólną linią albo generuje G-kod?
Ile kosztuje API do nestingu?
Czy to samo żądanie zawsze zwraca ten sam układ?
deterministic: false w odpowiedzi.