API pro nesting
API pro nesting od CutOptim rozmísťuje díly nepravidelného tvaru na tabule přes obyčejné HTTP. Obrysy — jako souřadnice nebo jako soubory DXF a SVG — a tabule pošlete v JSON na POST /v1/optimize/nest; odpověď obsahuje polohu a natočení každého dílu, počet tabulí, délku řezu a počet propalů a na požádání hotové rozložení v DXF a SVG.
Je to stejný tvarový nestingový engine, jaký používá aplikace CutOptim: ve výchozím stavu okamžitý a deterministický, s asynchronním hledáním max, když delší výpočet může ušetřit tabuli. Klíče si vystavíte sami, ceny jsou veřejné a POST /v1/validate/nest zkontroluje požadavek zdarma a bez klíče.
Skutečné volání nakreslené z jeho odpovědi
Čtyři typy dílů — L-úhelník, styčníkový plech, deska s drážkou a příruba poslaná jako soubor SVG — na jedné tabuli se zónou upnutí, které se díly musí vyhnout. Níže je výňatek ze skutečného těla požadavku; tabule je nakreslená ze souřadnic, které engine vrátil.
{
"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 }
}- Desky
- 1
- sheetCount
- Zaplnění
- 56,32 %
- density
- Umístěné díly
- 48 / 48
- placed
- Délka řezu
- 49 463
- cutLength
- Propaly
- 110
- pierces
Ocelové díly řezané laserem: tři poslané jako souřadnice, příruba jako soubor SVG (source). Žádný díl nezasahuje do upínací zóny (exclusions) a všechny drží požadovaný odstup (minSeparation).
Co API pro nesting umí
- Tvarový nesting libovolných polygonů s vnitřními otvory; díly zapadají do vydutých míst jiných dílů — 6 tabulí tam, kde stejné díly podle opsaného obdélníku potřebují 9.
- Díly jako souřadnice nebo soubory: dokument SVG nebo DXF v
parts[].source, nebo výkres s mnoha díly rozdělený přesPOST /v1/import/nest. Nic se neukládá. - Natočení pro každý díl: seznam povolených úhlů v
allowedRotations, nebo "continuous". - Tabule obdélníkové i polygonové, s vyloučenými zónami a zónami nižší kvality (
stock[].exclusions), mezerou mezi díly (options.minSeparation) a samostatným okrajem tabule (options.edgeClearance). - Více formátů tabulí s cenou: engine vybere nejlevnější kombinaci a s
options.respectStockpři omezené zásobě umístí nejdřív povinné díly (parts[].priority). - Podle materiálu: díl označený materiálem se vnoří jen na tabule z téhož materiálu.
- Soubory rozložení v odpovědi:
include:["svg","dxf"]vrátí použité tabule jako SVG a jako DXF s hladinami STOCK, PARTS, HOLES a ZONES.
Okamžitě, nebo důkladně: lbf a max
Výchozí engine lbf odpovídá v rámci HTTP požadavku a pro stejný vstup vrací vždy stejné rozložení — plán za nabídkou je plán za zakázkou. S engine: "max" úloha běží asynchronně: dostanete id úlohy a dotazujete se GET /v1/jobs/{id}, přičemž hledání využije options.timeBudgetMs k nalezení rozložení na menší počet tabulí. Nikdy nevrátí nic horšího než lbf a hlásí deterministic: false, protože časově omezené hledání se může mezi běhy lišit. Úlohu s vyloučenými zónami nebo polygonovými tabulemi obslouží lbf s varováním.
Souřadnice, nebo soubory CAD
Díl je obrys: polygon v jednotce podle vaší volby, volitelně s otvory, a každá souřadnice v odpovědi se vrací ve stejné jednotce. Pokud máte díly ve výkresech, pošlete výkres — parts[].source přijímá dokument SVG nebo DXF a server z něj načte obrys a otvory stejným parserem, jaký používá aplikace CutOptim. Soubor s mnoha díly projde nejdřív přes POST /v1/import/nest, který vrátí jeden obrys na díl.
Co dostanete zpět
Každá použitá tabule uvádí své díly jako tuhou transformaci — name, x, y a rotation — takže svůj vlastní obrys otočíte a posunete; nic se znovu neaproximuje. K rozložení přijde sheetCount, density, placed a total, cutLength a pierces pro odhad strojního času, totalPrice, když tabule mají cenu, stockUsage pro každý formát a unplaced pro vše, co se nevešlo, s důvodem ve warnings. S include:["svg","dxf"] přijdou výkresy ve stejné odpovědi.
Tarify a limity
Studio stojí 49 € měsíčně za 3 000 požadavků, Scale 149 € měsíčně za 10 000 požadavků; ceny bez DPH. Měsíční limit je pevný strop na účet bez poplatků za překročení a zbývající kvóta se vrací v hlavičce odpovědi a přes GET /v1/usage. S bezplatným testovacím klíčem postavíte integraci dřív, než zaplatíte, a POST /v1/validate/nest zkontroluje jakýkoli požadavek bez klíče a bez čerpání kvóty.
Co (zatím) neumí
Raději to řekneme tady než na obchodní schůzce. Engine vnořuje díly podle vnějšího obrysu: nevkládá malé díly do otvorů větších (díl v dílu), neslučuje společné hrany do jednoho řezu (řez společnou linií) a negeneruje G-kód — dostanete polohy, délku řezu, počet propalů a soubory DXF nebo SVG pro vlastní CAM. Je to webová služba; žádnou knihovnu instalovat nemusíte.
Zavolejte ho ze svého kódu
Stejný malý požadavek ve třech jazycích: dva typy dílů, jeden formát tabule s cenou, mezera 5 mm a rozložení zpět jako SVG a DXF. Klíč nahraďte svým.
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);Podle odvětví
Stejný endpoint vysvětlený pro dvě řemesla:
Nesting nepravidelných polygonů podle skutečného tvaru, s vyloučenými zónami.
Nesting podle skutečného tvaru na tabule plechu pro laser, plazmu nebo vodní paprsek.
Časté dotazy
Existuje bezplatné API pro nesting?
POST /v1/validate/nest zkontroluje jakýkoli požadavek bez klíče a bez kvóty. Produkční provoz běží na placeném tarifu s pevnou měsíční cenou.Mohu místo souřadnic poslat soubory DXF nebo SVG?
parts[].source a server z něj načte obrys a otvory. Soubor s mnoha díly projde přes POST /v1/import/nest, který vrátí jeden obrys na díl. Soubory se zpracují v paměti a neukládají se.Je API pro nesting synchronní, nebo asynchronní?
engine: "max" běží jako úloha na pozadí, na kterou se ptáte přes GET /v1/jobs/{id}; využije options.timeBudgetMs k hledání menšího počtu tabulí a nikdy nevrátí horší rozložení než lbf.Podporuje nesting díl v dílu?
Umí řez společnou linií nebo generuje G-kód?
Kolik API pro nesting stojí?
Vrátí stejný požadavek vždy stejné rozložení?
deterministic: false.