Program TonCut służy do optymalizacji rozkroju materiałów płaskich (2D) i podłużnych (1D), np.: szyb, drewna, płyt, kamienia, blachy, aluminium, plexi, kartonu, rur, belek, itp.
TonCut Engine służy do optymalizacji rozkroju materiałów 1D i 2D. Program umożliwia także zaawansowany nesting nieregularnych kształtów. Nie posiada on jednak interfejsu użytkownika. Dane do optymalizacji dostarcza się do niego w formacie JSON. Wyniki generowane są również w tym formacie.
Program może być używany wsadowo lub jako serwer Websocket. Dzięki prostemu i czytelnemu formatowi danych można go łatwo integrować z innymi systemami. W trybie serwerowym, bardzo proste API dodatkowo zwiększa możliwości integracyjne.
TonCut Engine może być uruchomiony jako usługa Windows. Wtedy można się z nim połączyć za pomocą protokołu Websocket (ws) lub Websocket Secure (wss).
Program może być również używany z linii komend jako narzędzie wsadowe. Wtedy dane wejściowe dostarcza się do programu za pomocą plików lub standardowego wejścia. Wyniki mogą być wypisane na standardowe wyjście lub do pliku.
{ "version": 3, "defaultUnits": { "time": "s", "percent": "%", "length": "mm", "field": "sqmm", "angle": "deg" }, "devices": [ { "id": 1, "title": "Urządzenie 2D", "materialKind": "2d", "canCutAnyShapes": true, "minCutWidth": 30, "edgingCuts": "optimal", "originEdgingCuts": "default" } ], "materials": [ { "id": 1, "deviceId": 1, "title": "Materiał 2D", "kind": "2d", "thickness": 18, "surplus": 0, "margin": 0, "defaultEdging": 0, "cuttingDimensions": "net", "canHaveStructure": true, "canBeVeneered": true, "canRotate": true, "canMirror": true, "kerf": 3, "allowEdgeCuts": true, "reuseWaste": { "enabled": true, "minLongerLength": 200, "minShorterLength": 200, "prefLongerLength": 600, "prefShorterLength": 600 } } ], "pieces": [ { "id": 1, "materialId": 1, "length": 300, "width": 500, "quantity": 5, "structure": ["byLength", "byWidth", "none"], "priority": "critical", "rotationStep": "30deg", "description": "", "surplus": 0, "margin": 0 }, { "id": 2, "materialId": 1, "length": 1220, "width": 740, "quantity": 1, "structure": ["byLength", "byWidth", "none"], "priority": "normal", "rotationStep": "30deg", "description": "", "surplus": 0, "margin": 0 }, { "id": 3, "materialId": 1, "quantity": 2, "structure": ["byLength", "byWidth", "none"], "priority": "critical", "rotationStep": "30deg", "surplus": 0, "shapeType": "any", "shape": { "format": "svg-path", "scale": 10, "path": "M 6593.5735,15977.848 4686.6782,9466.5001 17754.607,11543.287 Z" } }, { "id": 4, "materialId": 1, "length": 900, "width": 700, "quantity": 1, "structure": ["byLength", "byWidth", "none"], "surplus": 0, "rotationStep": "30deg", "shapeType": "L", "shape": { "vertLength": 500, "horzLength": 300, "recessedCorner": "topLeft" } }, { "id": 5, "materialId": 1, "length": 500, "width": 300, "quantity": 8, "structure": ["byLength", "byWidth", "none"], "surplus": 0, "rotationStep": "30deg", "shapeType": "trapezoid", "shape": { "leftSlopeLength": 200, "rightSlopeLength": 100 } }, { "id": 6, "materialId": 1, "length": 180, "width": 180, "quantity": 8, "structure": ["byLength", "byWidth", "none"], "surplus": 20, "rotationStep": "30deg", "shapeType": "circle", "shape": { "variant": "3/4" } }, { "id": 7, "length": 900, "width": 900, "quantity": 2, "materialId": 1, "rotationStep": "0deg", "shapeType": "ring", "shape": { "innerRadius": 410 } }, { "id": 8, "materialId": 1, "length": 180, "width": 140, "quantity": 16, "structure": ["byLength", "byWidth", "none"], "rotationStep": "30deg" } ], "stock": [ { "id": 1, "materialId": 1, "length": 2245, "width": 3210, "quantity": 1, "structure": "none", "priority": "normal", "description": "", "edging": { "left": 20, "right": 20, "top": 20, "bottom": 20 }, "defects": [ { "x": 300, "y": 600, "length": 200, "width": 100 } ] }, { "id": 2, "materialId": 1, "length": 2245, "width": 3210, "quantity": 1, "structure": "none", "priority": "low", "description": "", "edging": { "left": 20, "right": 20, "top": 20, "bottom": 20 } } ] }
{ "version": 3, "defaultUnits": { "length": "mm", "field": "sqmm", "angle": "rad" }, "statistics": { "2d": { "field": 7206450, "usedField": 4693641.6838, "wasteField": 2512808.3162, "unusedField": 0, "cutCount": 208, "cutsLength": 58002.780250133845 }, "1d": { "length": 0, "usedLength": 0, "wasteLength": 0, "unusedLength": 0, "cutCount": 0, "cutsLength": 0 } }, "cuttings": [ { "stockItemId": 1, "quantity": 1, "cost": 0, "gain": 0, "statistics": { "2d": { "field": 7206450, "usedField": 4693641.6838, "wasteField": 2512808.3162, "unusedField": 0, "cutCount": 208, "cutsLength": 58002.780250133845 } }, "pieces": [ { "pieceId": 2, "x": 500, "y": 20, "rotation": "0.000000rad", "shape": "M0,0 L122000,0 L122000,74000 L0,74000 Z ", "bbox": { "length": 1220, "width": 740 } }, { "pieceId": 5, "x": 164, "y": 526.97, "rotation": "4.712389rad", "shape": "M0.000238497610553168,-20000 L0.000476995221106336,-40000 L30000,-50000 L30000,0.000357746408553794 Z ", "bbox": { "length": 500, "width": 300 } }, { "pieceId": 5, "x": 2056, "y": 526.97, "rotation": "1.570796rad", "shape": "M-0.000874227785971016,-20000 L-0.00174845557194203,-40000 L-30000.001953125,-50000 L-30000,0.00131134164985269 Z ", "bbox": { "length": 500, "width": 300 } }, { "pieceId": 5, "x": 2372.87, "y": 559.36, "rotation": "2.617994rad", "shape": "M-17320.5078125,10000.0009765625 L-34641.015625,20000.001953125 L-58301.26953125,-980.758666992188 L-15000.001953125,-25980.76171875 Z ", "bbox": { "length": 500, "width": 300 } } ], "rest": [], "cuts": [ { "type": "line", "startX": 500, "startY": 20, "endX": 1720, "endY": 20, "needShift": false }, { "type": "line", "startX": 1720, "startY": 20, "endX": 1720, "endY": 760, "needShift": false }, { "type": "curve", "startX": 1462.42, "startY": 1656, "startXp": 1235.98, "startYp": 1656, "endXp": 1052.42, "endYp": 1472.44, "endX": 1052.42, "endY": 1246, "needShift": false }, { "type": "curve", "startX": 1052.42, "startY": 1246, "startXp": 1052.42, "startYp": 1019.56, "endXp": 1235.98, "endYp": 836, "endX": 1462.42, "endY": 836, "needShift": false } ] } ] }
Prezentowane tutaj dane wejściowe oraz wyniki optymalizacji są niepełne ze względu na ich rozmiar. Mają one charakter wyłącznie poglądowy i służą do prezentacji działania API.
Więcej informacji o API znajdziesz w dokumentacji oraz w przykładach, które możesz znaleźć w katalogu programu, po jego instalacji na swoim komputerze.
Wersja serwerowa pozwala na komunikację za pomocą prostego i łatwego API działającego w oparciu o protokół Websocket.
Wszystkie wiadomości wymieniane między serwerem a klientem są zapisane w formacie JSON.
Przykładowa komenda:{ "cmd":"cmdListJobs","id":9222}Przykładowa odpowiedź:
{ "id":9222,"jobs":[{ "id":1,"state":"sDone","progress":100,"combinationCount":1042885,"createDate":"2023-04-18T12:31:43.133+02:00","startDate":"2023-04-18T12:31:43.166+02:00","endDate":"2023-04-18T12:31:44.739+02:00"}],"success":true}Przykładowe zdarzenie:
{ "event":"JobProgress","jobId":1,"progress":74,"combinationCount":668878}
Komendy wysyłane są do serwera. Przykładowe komendy to np. "dodaj zadanie", "pobierz listę zadań", "pobierz status", "pobierz dane zadania", itp.
Serwer przysyła odpowiedzi do klienta. W zależności od rodzaju komendy, odpowiedź może mieć różny format.
Serwer wysyła też, sam z siebie, różne zdarzenia, np. "dodanie zadania", "postęp optymalizacji", "zakończenie optymalizacji", itp.
Program wykonuje tylko jedną optymalizację w danej chwili. W tym czasie może przyjmować nowe zadania do optymalizacji, ale będą one kolejkowane i wykonywane w kolejności, w jakiej zostały dodane.
Zadanie, to pojedyncze zlecenie optymalizacyjne. Zadania są niezależne od siebie - zawierają pełen zestaw danych wejściowych, tj. elementy, zasoby, grupy materiałowe, okleiny i urządzenia tnące.
Wyniki zawierają wszystkie rozkroje. Każdy rozkrój zawiera ułożenie elementów i odpadu, oraz listę cięć.
W celu aktualizacji programu wystarczy zainstalować nową wersję. Nie należy odinstalowywać starej wersji programu przed aktualizacją!