CutOptim Engine API
Pjovimo optimizavimo API: siunčiate detales ir ruošinius — 2D plokštes, 1D strypus, medieną arba netaisyklingų detalių išdėstymą pagal tikrąją formą — ir gaunate išdėstymą, pjovimo planą ir išeigą. Pagal numatytuosius nustatymus ta pati užklausa visada grąžina tą patį planą.
Žiūrėti visą palyginimą (EN) → · Išmatuota, ne deklaruota
{
"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 }
}Kodėl verta juo remtis
Ta pati įvestis visada grąžina tą patį rezultatą — jokio atsitiktinumo, jokio laikrodžio algoritme. Rezultatus galite talpinti podėlyje ir lyginti testuose. Vienintelė pasirenkama išimtis, laiko ribojama išdėstymo paieška max, tai nurodo kiekviename atsakyme (deterministic: false).
Ne tik stačiakampiai: giljotininių pjūvių seka, pjūvio linijos ir pjūklo praėjimai, supjautas ilgis ir žymė, ar planą galima atlikti formatiniu pjūklu.
Pjūvio plotis, apipjovimas kiekvienoje pusėje, tolerancija, kainos režimas, rievių kryptis ir rievių derinimas, didžiausias pjovimo etapų skaičius, sukimų mažinimas — tos pačios parinktys, kaip programoje.
Kurti patiems ar naudoti API
Pjovimo optimizatorius atrodo kaip savaitgalio projektas, o virsta ilga kraštutinių atvejų uodega: pjūvio pločio ir apipjovimo aritmetika, besibaigiantys ruošiniai, sukimo ir rievių taisyklės, išdėstymai, kuriuos reikia supjauti nuo krašto iki krašto, daugiakampiai su skylėmis — ir regresijos testai, įrodantys, kad pakeitimas niekada nepablogina plano. Engine API — tai šis darbas, jau atliktas ir išmatuotas.
Rašyti ir tikrinti keturių optimizatorių — 2D giljotininių plokščių, 1D linijinių ruošinių, medienos pagal skerspjūvį ir išdėstymo pagal tikrąją formą — ir palaikyti jų teisingumo augant reikalavimams. Jūsų komanda integruoja vieną HTTP sutartį.
Plano kokybė skelbiama, o ne deklaruojama: atviras palyginimas paleidžia variklį viešuose akademiniuose rinkiniuose ir sugeneruotose užduotyse, metodas ir neapdoroti rezultatai atsisiunčiami. Tuos pačius rinkinius paleiskite su bet kuria kita svarstoma alternatyva.
Kaina puslapyje, 14 d. bandomasis laikotarpis ir raktas iš jūsų paskyros — jokio pardavimo skambučio ir licencijos derybų prieš testuojant. Patikrinimo endpoint’ams raktas visai nereikalingas.
Jūsų duomenų modelis, sąsaja ir kainodaros taisyklės. Sinchroninės užklausos nieko nesaugo; asinchroninė max užduotis savo rezultatą laiko tik trumpą laiką, kad galėtumėte jo užklausti. meta objektas ant bet kurios detalės ar lakšto grįžta nepakeistas, todėl planas sutampa su jūsų įrašais.
Žiūrėti visą palyginimą (EN) →
Reikia paruošto užsakymų ekrano, užuot jį kūrus patiems?
CutOptim Configurator veikia šiuo varikliu →Prijunkite savo parduotuvę ar ERP (EN) →Kainos
Kiekviena užklausa skaičiuojama vienodai – įskaitant nesting · Parašysime el. laišką, kai išnaudosite 90% kvotos ir kai ji baigsis.
Išbandykite nemokamai: viešas demonstracinis raktas API dokumentacijoje ir testiniai raktai su 1,000 užklausų per mėnesį, už kuriuos niekada neapmokestinama
Didesni kiekiai. 10,000 užklausų per mėnesį yra standartinis planas, o ne riba to, ką galime apdoroti. Jei reikia daugiau — didesnio kiekio, atskirų raktų testavimui ir gamybai ar specialaus susitarimo — praneškite savo skaičius, ir kainą nustatysime individualiai. Praneškite savo kiekį →
Užsisakydami sutinkate su Engine API paslaugų sąlygomis (anglų kalba).
Įprasti CutOptim planai (Free / Pro / Workshop) su API nesusiję — programos optimizatorius juose lieka įtrauktas. Žiūrėti programos kainas →
Kas įvedama, kas gaunama
Po vieną tikrą užduotį kiekvienam režimui: viršuje užklausos turinys, apačioje grįžęs planas, nubraižytas tiesiai iš atsakymo.
POST /v1/optimize/2d{
"parts": [
{ "name": "Side", "w": 720, "h": 560, "qty": 6 },
{ "name": "Bottom", "w": 764, "h": 560, "qty": 3 },
{ "name": "Top", "w": 764, "h": 560, "qty": 3 },
{ "name": "Shelf", "w": 762, "h": 520, "qty": 3 },
{ "name": "Rail", "w": 764, "h": 100, "qty": 6 },
{ "name": "Plinth", "w": 764, "h": 120, "qty": 6 },
{ "name": "Door", "w": 397, "h": 716, "qty": 6, "rotatable": false },
{ "name": "Drawer front", "w": 796, "h": 176, "qty": 3 }
],
"stock": [
{ "w": 2800, "h": 2070, "qty": 5, "price": 38.5 }
],
"options": { "kerf": 4, "trim": { "left": 10, "right": 10, "top": 10, "bottom": 10 } }
}200 · sheets[].parts- Lakštai
- 2
- sheetCount
- Išeiga
- 80,31 %
- yieldPct
- Išdėstyta detalių
- 36 / 36
- placed
- Pjūvio linijos
- 39
- cutLines
- Medžiagos kaina
- 77
- totalPrice
Apatinių spintelių eilė iš standartinės drožlių plokštės. Durelės išlaiko rievių kryptį (rotatable: false); visas kitas detales galima sukti.
Norite paveikslėlio tiesiai iš API? 2D ir išdėstymo režimuose pridėkite "svg" prie include, ir atsakyme bus brėžinys.
POST /v1/optimize/1d{
"parts": [
{ "name": "Post", "length": 2400, "qty": 4 },
{ "name": "Rail", "length": 1750, "qty": 6 },
{ "name": "Brace", "length": 940, "qty": 8 },
{ "name": "Cross", "length": 620, "qty": 10 }
],
"stock": [
{ "length": 6000, "qty": 10, "price": 24.9 }
],
"options": { "kerf": 3, "trim": { "start": 10 } }
}200 · rods[].parts- Strypai
- 6
- rodCount
- Išeiga
- 93,94 %
- yieldPct
- Išdėstyta detalių
- 28 / 28
- placed
- Pjūviai
- 28
- cuts
- Medžiagos kaina
- 149,4
- totalPrice
Plieninio karkaso pjovimo sąrašas iš viso ilgio strypų. Kiekviename strype matyti, kur prasideda detalės (pos) ir kas lieka (remaining).
POST /v1/optimize/wood{
"parts": [
{ "name": "Stud", "sw": 45, "sh": 95, "length": 2350, "qty": 6 },
{ "name": "Nogging", "sw": 45, "sh": 95, "length": 555, "qty": 12 },
{ "name": "Joist", "sw": 45, "sh": 145, "length": 3600, "qty": 3 },
{ "name": "Blocking", "sw": 45, "sh": 145, "length": 1150, "qty": 3 }
],
"stock": [
{ "name": "C24 45x95", "sw": 45, "sh": 95, "length": 4800, "qty": 10, "price": 9.8 },
{ "name": "C24 45x145", "sw": 45, "sh": 145, "length": 4800, "qty": 6, "price": 14.6 }
],
"options": { "kerf": 3 }
}200 · sections[].rods[].parts- Skerspjūviai
- 2
- sectionCount
- Strypai
- 8
- rodCount
- Išeiga
- 91,17 %
- yieldPct
- Išdėstyta detalių
- 24 / 24
- placed
- Medžiagos kaina
- 92,8
- totalPrice
Karkaso mediena dviejų skerspjūvių. Kiekvienas skerspjūvis pjaunamas tik iš savo ruošinių ir grąžinamas su savo sumomis.
POST /v1/optimize/nest{
"parts": [
{ "name": "bracket", "polygon": [[0,0], [300,0], [300,100], [100,100], [100,300], [0,300]], "qty": 12, "allowedRotations": [0,90,180,270] },
{ "name": "gusset", "polygon": [[0,0], [250,0], [0,250]], "qty": 14, "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": 12, "allowedRotations": [0,90] },
{ "name": "flange", "source": { "content": "<svg xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"90\" cy=\"90\" r=\"90\"/><circle cx=\"90\" cy=\"90\" r=\"32\"/><circle cx=\"90\" cy=\"30\" r=\"9\"/><circle cx=\"150\" cy=\"90\" r=\"9\"/><circle cx=\"90\" cy=\"150\" r=\"9\"/><circle cx=\"30\" cy=\"90\" r=\"9\"/></svg>", "filename": "flange.svg" }, "qty": 10, "allowedRotations": [0] }
],
"stock": [
{ "w": 2500, "h": 1250, "qty": 3, "price": 96, "exclusions": [{ "polygon": [[1150,0], [1350,0], [1350,70], [1150,70]], "quality": 0 }] }
],
"options": { "minSeparation": 5, "edgeClearance": 10 }
}Išdėstymo viešoje demonstracijoje nėra — paleiskite šį pavyzdį su nemokamu testiniu raktu. Sukurti nemokamą testinį raktą
200 · sheets[].parts- Lakštai
- 1
- sheetCount
- Užpildymas
- 56,32 %
- density
- Išdėstyta detalių
- 48 / 48
- placed
- Pjūvio ilgis
- 49 463
- cutLength
- Pradūrimai
- 110
- pierces
Lazeriu pjaunamos plieno detalės: trys siunčiamos koordinatėmis, flanšas — SVG failu (source). Kiekviena detalė lieka už spaustuvo zonos (exclusions) ir išlaiko prašomą tarpą (minSeparation).
Norite paveikslėlio tiesiai iš API? 2D ir išdėstymo režimuose pridėkite "svg" prie include, ir atsakyme bus brėžinys.
Kiekvienas brėžinys sudarytas iš atsakymo koordinačių — niekas nedėliojama ranka. Keturias užduotis išsprendžia tas pats variklis, kurį naudoja API, o mūsų testai jas sprendžia iš naujo, kad skaičiai liktų teisingi.
Ką daro API
Po vieną užklausą 2D plokštėms, 1D linijiniams ruošiniams, medienai su skerspjūvio derinimu ir netaisyklingų daugiakampių išdėstymui pagal tikrąją formą — POST /v1/optimize/2d, /1d, /wood ir /nest.
POST /v1/optimize/nest išdėsto bet kokius daugiakampius (su skylėmis) fiksuotuose lakštuose, įterpdamas detales į viena kitos įdubas — 6 lakštai ten, kur tos pačios detalės pagal gaubiantį stačiakampį užima 9. Lazeriui, plazmai ir vandens srovei. Kartu — draudžiamos zonos kiekvienam lakštui (defektas, spaustuvas).
Pažymėkite detales ir ruošinius medžiaga, ir optimizatorius padalija užduotį: kiekviena medžiaga pjaunama tik iš savo ruošinių. Visuose režimuose; grąžinama suvestinė pagal medžiagą.
Nurodykite apklijavimo tipą kiekvienam kraštui (2D), ir atsakymas susumuoja metrus pagal tipą — detalei ir užsakymui. Tai metaduomenys: detalės jie niekada nepajudina.
Nurodykite detales, kurių rievės turi tęstis — stalčiaus fasadą virš dviejų durelių — suderintame rinkinyje (matchedSets, 2D), ir jos pjaunamos greta iš vieno plokštės gabalo, per vieną pjūvio plotį viena nuo kitos. Kiekvienas narys grąžinamas su savo rinkiniu ir padėtimi, juos pažymi ir CSV, SVG bei DXF eksportai.
Paprašykite include:["svg","csv","dxf"], ir atsakyme išdėstymas bus kaip paruoštas failas — savarankiškas 2D SVG brėžinys, R12/AC1009 DXF arba CSV pjovimo sąrašas. Jokios saugyklos, jokios antros užklausos.
Prie bet kurios detalės ar ruošinio eilutės pridėkite meta objektą — ERP prekės numerį, užsakymo eilutės id, kliento nuorodą — ir jis grįš nepakeistas su kiekviena išdėstyta detale ir kiekvienu lakštu ar strypu, todėl planas sutampa su jūsų sistema.
POST /v1/validate/{2d,1d,wood,nest} patikrina tą pačią užklausą pagal schemą jos nesprendžiant — be rakto, be kvotos. Prieš išleisdami užklausą įsitikinkite, kad ji nebus atmesta, ir gaukite įvykdomumo įspėjimus.
minimizeCost rikiuoja pagal mažiausią bendrą sąskaitą tarp įkainotų ruošinių dydžių, maišydamas formatus; numatytasis režimas mažina medžiagos kiekį. Abu naudoja tą patį giljotininį algoritmą.
Pažymėkite ruošinius, kuriuos reikia sunaudoti pirmiausia, laikykite kiekius griežta riba su respectStock ir pažymėkite būtinas detales, kurios laimi vietą plokštėje, kai medžiagos trūksta.
Ne tik stačiakampiai: giljotininių pjūvių seka su sustojimo padėtimis kiekviename žingsnyje, pjūvio linijos ir pjūklo praėjimai, supjautas ilgis ir žymė, ar planą galima atlikti formatiniu pjūklu.
kerf, apipjovimas kiekvienoje pusėje, tolerancija, rievių kryptis, suderinti rinkiniai, maxCutStages ir sukimų mažinimas — tos pačios parinktys, kaip programoje.
Ta pati įvestis visada grąžina tą patį rezultatą — talpinkite ir lyginkite (pasirenkama, laiko ribojama išdėstymo paieška max praneša deterministic: false). Fiksuojama variklio versija ir OpenAPI 3.1 dokumentas aprašo visą sutartį.
Vietoj koordinačių siųskite SVG arba DXF: parts[].source nuskaito kontūrą ir jo skyles iš brėžinio, o POST /v1/import/nest pirmiau padalija kelių detalių failą. Niekas nesaugoma — failas apdorojamas atmintyje ir dingsta kartu su atsakymu.
Claude Code, Cursor, VS Code ir Claude Desktop kviečia variklį kaip įrankius per https://api.cutoptim.com/mcp — su tuo pačiu API raktu ir kvota kaip REST. Vietoje jis veikia ir kaip npm paketas @cutoptim/mcp.
Du greičiai: pasiūlymas dabar, medžiagos taupymas vėliau
Daugumai integracijų reikia abiejų — atsakymo, kol klientas laukia, ir tankesnio plano, kai užduotis keliauja į stakles. Renkatės kiekvienai užklausai.
Sinchroniniai varikliai — heuristic 2D, 1D ir medienai, lbf išdėstymui — atsako HTTP užklausos metu, deterministiškai, todėl planas už pasiūlymo yra tas pats planas už užsakymo.
Siųskite užduotį su engine: "max" ir rezultato užklauskite per GET /v1/jobs/{id}. 2D plokštėse jis ieško įrodyto optimumo link; išdėstant pagal tikrąją formą skiria laiko biudžetą (options.timeBudgetMs) mažesniam lakštų skaičiui rasti ir niekada negrąžina daugiau nei akimirksnio atsakymas.
Atsakymo forma abiem atvejais ta pati. 2D režime max variklis priima siauresnį parinkčių rinkinį nei heuristic (dokumentacijoje jos išvardytos), o išdėstymo užduotį su draudžiamomis zonomis vis tiek aptarnauja lbf.
Kuris variklis aptarnauja kurį režimą
Endpoint, į kurį siunčiate POST, parenka režimą; parametras engine parenka algoritmą. Numatytasis variklis heuristic aptarnauja 2D, 1D ir medieną; balanced — tik 2D; asinchroninis max aptarnauja 2D plokštes ir išdėstymą pagal tikrąją formą; o išdėstymas pagal nutylėjimą naudoja savo variklį lbf. Tas pats variklis kaip programoje, per HTTP.
- heuristic — Numatytasis — giljotininis kelių strategijų pakuotojas. Didžiausia išeiga, kiekvienas išdėstymas supjaunamas pjūklu ir visada grąžinamas pjovimo planas. Aptarnauja 2D, 1D ir medieną.
- balanced — Pasirenkamas MaxRects laisvasis išdėstytojas 2D režimui. Labai didelėse užduotyse daug greitesnis, išeiga šiek tiek mažesnė, tačiau jo išdėstymų dažnai negalima supjauti nuo krašto iki krašto, todėl jie neturi pjovimo plano.
- max — Asinchroninis lygis: pateikiate užduotį ir rezultato užklausiate per GET /v1/jobs/{id}. 2D režime tai medžio paieška, kuri daug daugiau užduočių pasiekia įrodytą optimumą, per sekundes ar minutę vienam sprendimui — vis tiek deterministiška ir supjaunama pjūklu. Išdėstant pagal tikrąją formą pirmiausia paleidžiamas lbf, tada skiriamas laiko biudžetas išdėstymui su mažiau lakštų ieškoti, ir niekada negrąžinama daugiau; ši paieška ribojama laiku, todėl jos rezultatai praneša deterministic: false.
- lbf — Numatytasis išdėstymo pagal tikrąją formą variklis. Įterpia netaisyklingus daugiakampius į viena kitos įdubas lazeriui, plazmai ir vandens srovei — akimirksniu ir deterministiškai. max (aukščiau) gali tada ieškoti tos pačios užduoties sprendimo su mažiau lakštų.
Kuris endpoint kuriai medžiagai: plokšti lakštai — fanera, MDF, stiklas, akrilas, lakštinis metalas — į /v1/optimize/2d; strypai, vamzdžiai ir profiliai į /v1/optimize/1d; konstrukcinė mediena (50×150 tik iš 50×150) į /v1/optimize/wood; netaisyklingi daugiakampiai lazeriui, plazmai ir vandens srovei į /v1/optimize/nest.
Viena užklausa — visas planas
curl https://api.cutoptim.com/v1/optimize/2d \
-H "Authorization: Bearer co_live_…" \
-H "Content-Type: application/json" \
-d '{
"parts": [
{ "name": "Door", "w": 600, "h": 400, "qty": 4 },
{ "name": "Shelf", "w": 800, "h": 300, "qty": 6 }
],
"stock": [{ "w": 2440, "h": 1220, "price": 42 }],
"options": { "kerf": 3, "effort": "balanced" },
"engine": "heuristic"
}'Grįžta kaip:
{
"metrics": { "sheetCount": 1, "yieldPct": 80.62, "placed": 10, "total": 10,
"cutLines": 10, "sawPasses": 13, "cutLength": 10720, "totalPrice": 42 },
"sheets": [ … ],
"cutPlan": [{ "sheet": 0, "step": 1, "axis": "h", "pos": 400, "length": 2440, "stage": 1 }, … ],
"guillotineValid": true,
"engineVersion": "1.0.0+10e0c941",
"deterministic": true
}Visa užklausos ir atsakymo struktūra, kiekviena parinktis, visi klaidų kodai ir kiekvienas variklis:API dokumentacija (EN) → · Integracijos gidas (EN) →
Greitai ar tankiai? Pasirinkite viena parinktimi
Parinktis effort derina sprendimo laiką ir išeigą. Štai šis kompromisas, išmatuotas vienoje sudėtingoje užduotyje — kiekvienas skaičius gautas iš tikrojo pakuotojo.
Ir abiem atvejais greita: net didžiausios gamybinės užduotys — 2 000 detalių ir daugiau — numatytuoju varikliu išsprendžiamos per kelias sekundes, gerokai neviršijant API laiko biudžeto.
Sprendimai pagal pramonės šaką
Tas pats variklis, pritaikytas tam, kaip pjauna konkreti šaka. Kiekviename puslapyje (anglų k.) — endpoint, užklausa ir atsakymas bei tai medžiagai svarbūs laukai.
Variklis dirba su geometrija, o ne su medžiagų katalogu: lakštinis metalas ir plokštės, medienos plokštės, stiklas, plastikai ir akrilas, kompozitai, putos, kartonas ir popierius — visi eina per tuos pačius endpoint’us. Medžiaga keičia tik siunčiamus skaičius — pjūvio plotį ar tarpą tarp detalių, atstumą nuo krašto, ruošinių dydžius.
Išdėstymas pagal tikrąją formą per REST: įvedami daugiakampiai arba DXF/SVG detalės, gaunamos padėtys ir DXF/SVG išdėstymas. POST /v1/optimize/nest
1D pjovimas pagal ilgį vamzdžiams ir tuščiaviduriams profiliams. POST /v1/optimize/1d
1D pjovimas pagal ilgį plieno ir aliuminio profiliams, strypams ir sijoms, su kainos režimu. POST /v1/optimize/1d
2D giljotininis pjovimas be pjūvio pločio (įbrėžti ir laužti) flotiniam, grūdintam stiklui ir veidrodžiams. POST /v1/optimize/2d
1D pjovimas pagal ilgį konstrukcinei medienai su skerspjūvio derinimu. POST /v1/optimize/wood
Netaisyklingų daugiakampių išdėstymas pagal tikrąją formą, su draudžiamomis zonomis. POST /v1/optimize/nest
Išdėstymas pagal tikrąją formą lakštuose lazeriui, plazmai ar vandens srovei. POST /v1/optimize/nest
Armatūros lenkimo žiniaraščio optimizavimas. · ieškome partnerių
The why, what and how of the CutOptim Engine API on two pages — the four modes, a real request and its plan, how to try it free, and the two plans. Print-ready, with a QR back to this page.