Discount
How to get a discount? Check on Facebook!
OK
Save material, time and money
Powered by AI

TonCut is intended for cutting optimization of flat (2D) and long (1D) materials, such as: glass, wood, stone, metal, aluminum, plexiglass, cardboard, tubes, bars, etc.

What is TonCut for Automation and what is its purpose?

TonCut for Automation is used for cutting optimization of 1D and 2D materials. However, it does not feature a user interface. Data for optimization is delivered to it in JSON format. The results are also generated in this format.

The program can be used in batch mode or as a Websocket server. Thanks to the simple and clear data format, it can be easily integrated with other systems. In server mode, a very simple API expands integration possibilities.

For servers

TonCut for Automation can be run as a Windows service. In this case, you can connect to it via Websocket (ws) or Websocket Secure (wss) protocol.

Batch mode

The program can also be launched from the command line as a batch tool. In this case, input data is provided to the program via files or standard input. The results can be written to standard output or to a file.

Simple and readable data format

Input data

{
  "version": 1,
  "defaultUnits": {
    "time": "s",
    "percent": "%",
    "length": "mm",
    "field": "sqmm",
    "angle": "deg"
  },
  "devices": [
    {
      "id": 1,
      "title": "2D device",
      "materialKind": "2d",
      "canCrossCuts": false,
      "fullCutsOnly": true,
      "stripCuts": true,
      "minCutWidth": 0,
      "edgingCuts": "optimal",
      "originEdgingCuts": "default",
      "firstCutDirection": "any"
    }
  ],
  "materials": [
    {
      "id": 1,
      "deviceId": 1,
      "title": "2D material",
      "kind": "2d",
      "thickness": 18,
      "canHaveStructure": true,
      "surplus": 0,
      "surplusEditable": true,
      "margin": 0,
      "marginEditable": true,
      "defaultEdging": 0,
      "cuttingDimensions": "net",
      "canBeVeneered": true,
      "kerf": 3,
      "allowEdgeCuts": true,
      "reuseWaste": {
        "minShorterLength": 200,
        "minLongerLength": 200
      }
    }
  ],
  "pieces": [
    {
      "id": 1,
      "materialId": 1,
      "length": 922,
      "width": 688,
      "quantity": 10,
      "structure": ["byLength", "byWidth", "none"],
      "priority": "normal",
      "description": "",
      "surplus": 0,
      "margin": 0
    },
    {
      "id": 2,
      "materialId": 1,
      "length": 1220,
      "width": 740,
      "quantity": 20,
      "structure": ["byLength", "byWidth", "none"],
      "priority": "normal",
      "description": "",
      "surplus": 0,
      "margin": 0
    }
  ],
  "stock": [
    {
      "id": 1,
      "materialId": 1,
      "length": 3210,
      "width": 2245,
      "quantity": 1,
      "structure": "none",
      "priority": "normal",
      "description": "",
      "edging": {
          "left": 20,
          "right": 20,
          "top": 20,
          "bottom": 20
      }
    }
  ]
}
        

Results

{
  "version": 2,
  "units": {
    "length": "mm",
    "field": "sqm",
    "angle": "rad"
  },
  "statistics": {
    "2d": {
      "field": 7.20645,
      "usedField": 6.514416,
      "wasteField": 0.692034,
      "unusedField": 0,
      "cutCount": 20,
      "cutsLength": 21335
    },
    "1d": {
      "length": 0,
      "usedLength": 0,
      "wasteLength": 0,
      "unusedLength": 0,
      "cutCount": 0,
      "cutsLength": 0
    }
  },
  "cuttings": [
    {
      "stockItemId": 1,
      "quantity": 1,
      "statistics": {
        "2d": {
          "field": 7.20645,
          "usedField": 6.514416,
          "wasteField": 0.692034,
          "unusedField": 0,
          "cutCount": 20,
          "cutsLength": 21335
        }
      },
      "pieces": [
        {
          "pieceId": 1,
          "x": 23,
          "y": 23,
          "rotated": false
        },
        {
          "pieceId": 1,
          "x": 23,
          "y": 714,
          "rotated": false
        },
        {
          "pieceId": 1,
          "x": 23,
          "y": 1405,
          "rotated": false
        },
        {
          "pieceId": 2,
          "x": 948,
          "y": 23,
          "rotated": true
        },
        {
          "pieceId": 2,
          "x": 1691,
          "y": 23,
          "rotated": true
        },
        {
          "pieceId": 2,
          "x": 2434,
          "y": 23,
          "rotated": true
        },
        {
          "pieceId": 1,
          "x": 948,
          "y": 1246,
          "rotated": true
        },
        {
          "pieceId": 1,
          "x": 1639,
          "y": 1246,
          "rotated": true
        },
        {
          "pieceId": 1,
          "x": 2330,
          "y": 1246,
          "rotated": true
        }
      ],
      "rest": [
        {
          "x": 0,
          "y": 2096,
          "length": 945,
          "width": 149,
          "identifier": "",
          "usable": false
        },
        {
          "x": 3177,
          "y": 0,
          "length": 33,
          "width": 1243,
          "identifier": "",
          "usable": false
        },
        {
          "x": 948,
          "y": 2171,
          "length": 1379,
          "width": 74,
          "identifier": "",
          "usable": false
        },
        {
          "x": 2330,
          "y": 2171,
          "length": 688,
          "width": 74,
          "identifier": "",
          "usable": false
        },
        {
          "x": 3021,
          "y": 1246,
          "length": 189,
          "width": 999,
          "identifier": "",
          "usable": false
        },
        {
          "x": 0,
          "y": 0,
          "length": 945,
          "width": 20,
          "identifier": "",
          "usable": false
        },
        {
          "x": 948,
          "y": 0,
          "length": 740,
          "width": 20,
          "identifier": "",
          "usable": false
        },
        {
          "x": 1691,
          "y": 0,
          "length": 740,
          "width": 20,
          "identifier": "",
          "usable": false
        },
        {
          "x": 2434,
          "y": 0,
          "length": 740,
          "width": 20,
          "identifier": "",
          "usable": false
        },
        {
          "x": 0,
          "y": 23,
          "length": 20,
          "width": 688,
          "identifier": "",
          "usable": false
        },
        {
          "x": 0,
          "y": 714,
          "length": 20,
          "width": 688,
          "identifier": "",
          "usable": false
        },
        {
          "x": 0,
          "y": 1405,
          "length": 20,
          "width": 688,
          "identifier": "",
          "usable": false
        }
      ],
      "cuts": [
        {
          "startX": 948,
          "startY": 0,
          "endX": 948,
          "endY": 2245
        },
        {
          "startX": 0,
          "startY": 23,
          "endX": 948,
          "endY": 23
        },
        {
          "startX": 0,
          "startY": 714,
          "endX": 948,
          "endY": 714
        },
        {
          "startX": 23,
          "startY": 23,
          "endX": 23,
          "endY": 714
        },
        {
          "startX": 0,
          "startY": 1405,
          "endX": 948,
          "endY": 1405
        },
        {
          "startX": 23,
          "startY": 714,
          "endX": 23,
          "endY": 1405
        },
        {
          "startX": 0,
          "startY": 2096,
          "endX": 948,
          "endY": 2096
        },
        {
          "startX": 23,
          "startY": 1405,
          "endX": 23,
          "endY": 2096
        },
        {
          "startX": 948,
          "startY": 1246,
          "endX": 3210,
          "endY": 1246
        },
        {
          "startX": 1691,
          "startY": 0,
          "endX": 1691,
          "endY": 1246
        },
        {
          "startX": 948,
          "startY": 23,
          "endX": 1691,
          "endY": 23
        },
        {
          "startX": 2434,
          "startY": 0,
          "endX": 2434,
          "endY": 1246
        },
        {
          "startX": 1691,
          "startY": 23,
          "endX": 2434,
          "endY": 23
        },
        {
          "startX": 3177,
          "startY": 0,
          "endX": 3177,
          "endY": 1246
        },
        {
          "startX": 2434,
          "startY": 23,
          "endX": 3177,
          "endY": 23
        },
        {
          "startX": 2330,
          "startY": 1246,
          "endX": 2330,
          "endY": 2245
        },
        {
          "startX": 948,
          "startY": 2171,
          "endX": 2330,
          "endY": 2171
        },
        {
          "startX": 1639,
          "startY": 1246,
          "endX": 1639,
          "endY": 2171
        },
        {
          "startX": 3021,
          "startY": 1246,
          "endX": 3021,
          "endY": 2245
        },
        {
          "startX": 2330,
          "startY": 2171,
          "endX": 3021,
          "endY": 2171
        }
      ]
    }
  ]
}
        

Simple and easy to use API

The server version allows for communication using a simple and easy to use API based on the Websocket protocol.

All messages exchanged between the server and the client are saved in JSON format.

Sample command:
{ "cmd":"cmdListJobs","id":9222}
        
Sample response:
{ "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}
        
Sample event:
{ "event":"JobProgress","jobId":1,"progress":74,"combinationCount":668878}
        

Types of messages

Commands are sent to the server. Sample commands include "add job", "get list of jobs", "get status", "get job data", etc.

The server sends responses to the client. Depending on the type of command, the response may have a different format.

The server also sends various events by itself, e.g. "job added", "optimization progress", "optimization completed", etc.

Job queue

The program can perform only one optimization at a time. During this time, it can accept new jobs for optimization, but they will be queued and executed in the order in which they were added.

Jobs

A job is a single optimization order. Jobs are independent from each other - they contain a full set of input data, i.e. pieces, stock, material groups, veneers and cutting devices.

Results

The results include all cuttings. Each cutting includes the arrangement of pieces and waste, as well as the list of cuts.

Download TonCut for Automation

TonCut for Automation

1.1.55.1503

  • Use of AI for even better optimization results.
  • Using full power of your computer by using all CPU cores.
  • Ability to work in batch mode.
  • Ability to work as a Windows service (Websocket API).
  • Simple API in JSON format.
  • Cutting optimization of 2D and 1D materials.
  • Cutting of 1D materials with miter cuts.
  • Stack cutting.
  • Support for veneering.
  • Support for multiple material groups and cutting devices.

To update the program, just install the new version. Do not uninstall the old version of the program before upgrading!

Do you need more information?

Prices start at € 8.37. Choose version and license period suitable for yourself. Check prices
Do you know everything? Visit our store! Buy now Check how to buy
Check the TonCut for Automation documentation for more information. Learn more
Like us on Facebook
Newsletter sign up