Przejdź do głównej treści
← CutOptim Engine APIAPI do nestingu · POST /v1/optimize/nest

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.

Żądanie (fragment) · 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 }
}
Odpowiedź, narysowana z sheets[].parts
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[].source albo rysunek z wieloma detalami podzielony przez POST /v1/import/nest. Nic nie jest zapisywane.
  • Obrót dla każdego detalu: lista dozwolonych kątów w allowedRotations albo "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
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);

Według branży

Ten sam endpoint, objaśniony dla dwóch branż:

Najczęstsze pytania

Czy jest darmowe API do nestingu?
Całą integrację zbudujesz i przetestujesz za darmo: klucz testowy nic nie kosztuje, a 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?
Tak. Umieść rysunek w 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?
Na oba sposoby. Domyślny silnik lbf odpowiada w ramach żądania, deterministycznie. 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?
Jeszcze nie. Detale są rozmieszczane według zewnętrznego konturu, więc mały detal nie trafia do otworu większego. Jest to w naszych planach rozwoju; do tego czasu powierzchnia dużych wycięć zostaje w układzie pusta.
Czy robi cięcie wspólną linią albo generuje G-kod?
Nie. Odpowiedź podaje pozycję i obrót każdego detalu, długość cięcia, liczbę przebić oraz układ w DXF lub SVG, który twój CAM lub oprogramowanie maszyny zamienia w program cięcia.
Ile kosztuje API do nestingu?
Według planu, nie według liczby detali: Studio kosztuje 49 € miesięcznie za 3000 żądań, a Scale 149 € miesięcznie za 10 000 żądań, netto. Limit to twardy miesięczny pułap na konto bez opłat za przekroczenie.
Czy to samo żądanie zawsze zwraca ten sam układ?
Z domyślnym silnikiem lbf tak — te same dane dają ten sam wynik, więc możesz cache’ować i porównywać wyniki. Asynchroniczne wyszukiwanie max ma limit czasu i sygnalizuje to przez deterministic: false w odpowiedzi.

Benchmarki · Dokumentacja Engine API →