OK
Oszczędzaj materiał, czas i pieniądze
Napędzany przez Sztuczną Inteligencję

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.

Do czego służy TonCut Engine i jak można go używać?

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.

Dla serwerów

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).

Wsadowo

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.

Prosty i czytelny format danych

Dane wejściowe

{
  "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
      }
    }
  ]
}
        

Wyniki

{
  "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
        }
              ]
    }
  ]
}
        

Rozkrój

Uwaga

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.

Proste i łatwe API

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}
        

Rodzaje wiadomości

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.

Kolejka zadań

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.

Zadania

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

Wyniki zawierają wszystkie rozkroje. Każdy rozkrój zawiera ułożenie elementów i odpadu, oraz listę cięć.

Pobierz TonCut Engine

TonCut Engine

2.1.34.2330

  • Nesting kształtów nieregularnych.
  • Wykorzystanie sztucznej inteligencji w celu uzyskania jeszcze lepszych wyników optymalizacji.
  • Wykorzystanie pełnej mocy komputera, poprzez używanie wszystkich rdzeni procesora.
  • Możliwość pracy w trybie wsadowym.
  • Możliwość pracy jako usługa Windows (Websocket API).
  • Proste API w formacie JSON.
  • Optymalizacja rozkroju materiałów 2D i 1D.
  • Cięcie 1D ze skosami.
  • Cięcie w stosie.
  • Obsługa grup elementów oraz możliwość określenia kolejności optymalizacji elementów w ramach każdej z grup.
  • Wsparcie dla okleinowania.
  • Obsługa wielu grup materiałowych i urządzeń tnących.
  • Obsługa niestandardowych algorytmów optymalizacyjnych.
  • Optymalizacja kosztowa.

W celu aktualizacji programu wystarczy zainstalować nową wersję. Nie należy odinstalowywać starej wersji programu przed aktualizacją!

Potrzebujesz więcej informacji?

Ceny już od 34.99 zł. Wybierz odpowiednią wersję i okres licencji dla siebie. Sprawdź ceny
Już wszystko wiesz? Zapraszamy do naszego sklepu! Kup teraz Sprawdź jak kupować
Zapoznaj się z dokumentacją TonCut Engine, aby dowiedzieć się więcej. Dowiedz się więcej
Zapisz się do newslettera