Free tools / CAD DXF Quote API
DXF cut length calculator
Drop a DXF drawing below and get the total cut length in millimetres, measured the way a cutting quote needs it, plus pierces, net area and a preview.
- Free, no sign-up
- Your file is never stored
- Deterministic: no AI guesswork
Try it now
Your drawing is read in memory and discarded right after. Use “Ignore layers” for a title-block frame or a dimension layer. The sample tabs show three drawings with their full results.
The live demo needs JavaScript, which seems to be switched off. The sample tabs show the engine's real output without it.
Free: 3 runs a day, no sign-up. Files that cannot be read do not count.
Rounded corners as polyline bulges, six round holes, and a slot drawn as four loose entities.
mounting-plate.dxf 55678 bytes
svg_preview
Result
- Cut length
- 805.027 mm
- Pierces
- 7
- Parts / holes
- 1 / 6
- Net area
- 14605.313 mm²
- Bounding box
- 160.0 × 100.0 mm
- Closed / open contours
- 7 / 0
JSON response POST /v1/analyze-dxf
{
"api_version": "2.0",
"unit_code": 4,
"unit_name": "Millimeters",
"active_layer_count": 2,
"ignored_disabled_layer_count": 0,
"clamped_z_anomaly_count": 0,
"total_entity_count": 10,
"pierce_count": 7,
"closed_loop_count": 7,
"total_cut_length": 805.0265,
"bounding_box": {
"min_x": 0.0,
"min_y": 0.0,
"max_x": 160.0,
"max_y": 100.0,
"width": 160.0,
"height": 100.0,
"bounding_area": 16000.0
},
"entity_counts_by_type": {
"ARC": 2,
"CIRCLE": 5,
"LINE": 2,
"LWPOLYLINE": 1
},
"layer_summary": {
"0": {
"entity_count": 10,
"cut_length": 805.0265
}
},
"bom_blocks": [],
"mm_per_unit": 1.0,
"open_contour_count": 0,
"part_count": 1,
"hole_count": 6,
"net_area": 14605.3133,
"duplicate_length_removed": 0.0,
"total_cut_length_mm": 805.027,
"net_area_mm2": 14605.313,
"bounding_box_mm": {
"min_x": 0.0,
"min_y": 0.0,
"max_x": 160.0,
"max_y": 100.0,
"width": 160.0,
"height": 100.0,
"bounding_area": 16000.0
},
"ignored_entities": {
"invisible": 0,
"on_disabled_layers": 0,
"filtered_by_layer_option": 0,
"corrupt_coordinates": 0,
"unreadable": 0,
"not_cut_geometry": {}
},
"file_info": {
"dxf_version": "AC1032",
"binary": false,
"repaired": false
},
"warnings": [],
"svg_preview": "<svg …> (shown above)"
}
A doubled line, a text, dimensions, a title frame (excluded with exclude_layers=FRAME) and a 0.5 mm gap.
messy-export.dxf 57412 bytes · ?exclude_layers=FRAME
svg_preview
Result
- Cut length
- 1005.164 mm
- Pierces
- 3
- Parts / holes
- 1 / 1
- Net area
- 22745.003 mm²
- Bounding box
- 200.0 × 120.0 mm
- Closed / open contours
- 2 / 1
- Duplicate length removed
- 100.0 mm
- Excluded by layer filter
- 1
- Ignored DIMENSION
- 1
- Ignored TEXT
- 1
1 contour(s) have open ends: the drawing may have gaps; each open path needs its own pierce.
Removed 100.0 units of duplicate/overlapping lines from the cut length.
JSON response POST /v1/analyze-dxf
{
"api_version": "2.0",
"unit_code": 4,
"unit_name": "Millimeters",
"active_layer_count": 4,
"ignored_disabled_layer_count": 0,
"clamped_z_anomaly_count": 0,
"total_entity_count": 7,
"pierce_count": 3,
"closed_loop_count": 2,
"total_cut_length": 1005.1637,
"bounding_box": {
"min_x": 0.0,
"min_y": 0.0,
"max_x": 200.0,
"max_y": 120.0,
"width": 200.0,
"height": 120.0,
"bounding_area": 24000.0
},
"entity_counts_by_type": {
"CIRCLE": 1,
"LINE": 5,
"LWPOLYLINE": 1
},
"layer_summary": {
"0": {
"entity_count": 7,
"cut_length": 1105.1637
}
},
"bom_blocks": [],
"mm_per_unit": 1.0,
"open_contour_count": 1,
"part_count": 1,
"hole_count": 1,
"net_area": 22745.0025,
"duplicate_length_removed": 100.0,
"total_cut_length_mm": 1005.164,
"net_area_mm2": 22745.003,
"bounding_box_mm": {
"min_x": 0.0,
"min_y": 0.0,
"max_x": 200.0,
"max_y": 120.0,
"width": 200.0,
"height": 120.0,
"bounding_area": 24000.0
},
"ignored_entities": {
"invisible": 0,
"on_disabled_layers": 0,
"filtered_by_layer_option": 1,
"corrupt_coordinates": 0,
"unreadable": 0,
"not_cut_geometry": {
"DIMENSION": 1,
"TEXT": 1
}
},
"file_info": {
"dxf_version": "AC1032",
"binary": false,
"repaired": false
},
"warnings": [
"1 contour(s) have open ends: the drawing may have gaps; each open path needs its own pierce.",
"Removed 100.0 units of duplicate/overlapping lines from the cut length."
],
"svg_preview": "<svg …> (shown above)"
}
A MINSERT array of a bracket block with nested press-in nut blocks and attributes.
nested-sheet.dxf 56328 bytes
svg_preview
Result
- Cut length
- 1403.575 mm
- Pierces
- 18
- Parts / holes
- 6 / 12
- Net area
- 10975.532 mm²
- Bounding box
- 200.0 × 90.0 mm
- Closed / open contours
- 18 / 0
bom_blocks
| Block | Quantity | Layer | Attributes |
|---|---|---|---|
| BRACKET | 6 | 0 | – |
| PEM_NUT_M4 | 12 | 0 | PART = CLS-M4-1 |
JSON response POST /v1/analyze-dxf
{
"api_version": "2.0",
"unit_code": 4,
"unit_name": "Millimeters",
"active_layer_count": 2,
"ignored_disabled_layer_count": 0,
"clamped_z_anomaly_count": 0,
"total_entity_count": 31,
"pierce_count": 18,
"closed_loop_count": 18,
"total_cut_length": 1403.5752,
"bounding_box": {
"min_x": 10.0,
"min_y": 10.0,
"max_x": 210.0,
"max_y": 100.0,
"width": 200.0,
"height": 90.0,
"bounding_area": 18000.0
},
"entity_counts_by_type": {
"CIRCLE": 12,
"INSERT": 13,
"LWPOLYLINE": 6
},
"layer_summary": {
"0": {
"entity_count": 18,
"cut_length": 1403.5752
}
},
"bom_blocks": [
{
"block_name": "BRACKET",
"layer": "0",
"quantity": 6,
"sample_attributes": {}
},
{
"block_name": "PEM_NUT_M4",
"layer": "0",
"quantity": 12,
"sample_attributes": {
"PART": "CLS-M4-1"
}
}
],
"mm_per_unit": 1.0,
"open_contour_count": 0,
"part_count": 6,
"hole_count": 12,
"net_area": 10975.532,
"duplicate_length_removed": 0.0,
"total_cut_length_mm": 1403.575,
"net_area_mm2": 10975.532,
"bounding_box_mm": {
"min_x": 10.0,
"min_y": 10.0,
"max_x": 210.0,
"max_y": 100.0,
"width": 200.0,
"height": 90.0,
"bounding_area": 18000.0
},
"ignored_entities": {
"invisible": 0,
"on_disabled_layers": 0,
"filtered_by_layer_option": 0,
"corrupt_coordinates": 0,
"unreadable": 0,
"not_cut_geometry": {}
},
"file_info": {
"dxf_version": "AC1032",
"binary": false,
"repaired": false
},
"warnings": [],
"svg_preview": "<svg …> (shown above)"
}
How it works
- Export the part or flat pattern as DXF (any version from R12 to R2018+, ASCII or binary). DWG needs a DXF export first.
- Drop it into the box above. If the drawing has a frame or dimensions on their own layer, list that layer under “Ignore layers”.
- Read the cut length in mm, with pierces, parts and holes, net area and bounding box, ready for your price formula.
How the length is measured
The cut length is the total length of every contour that will be cut. A few things make that number different from a naive sum of all entities in the file:
- Blocks are expanded: nested, scaled, rotated and mirrored block references and MINSERT arrays are measured where they are placed, as many times as they appear.
- Hidden geometry is left out: layers that are off or frozen, invisible entities and, if you ask, whole layers by name.
- Open contours are reported: a gap in the drawing gets a warning, because each open path needs its own pierce.
In one test, a 1000 × 500 mm perforated sheet with 2,500 holes took about four seconds and gave the exact length. A 200 × 130 mm SolidWorks sign plate agreed with SolidWorks’ own STL export within 0.7 %, the difference coming from the STL’s straight-line approximation of curves.
Questions
How exact is the cut length?
Lines, arcs, circles and rounded polyline segments (bulges) are measured with exact formulas. Ellipses and splines are measured on a fine flattening. On 14 reference drawings with known answers the result was within 0.02 mm.
What if lines are drawn twice or overlap?
Duplicate and overlapping lines are counted once, and the response says how much length was removed, so a doubled edge does not double the price.
Are texts, dimensions and hatches counted?
No. TEXT, DIMENSION, HATCH and other non-cut entities are skipped and listed as ignored, as are layers that are switched off or frozen. You can also ignore layers by name.
What units does it use?
Any drawing unit; every value is also given in millimetres. A drawing without a unit is read as millimetres, with a warning.
Can it read DWG files?
No, DWG is AutoCAD’s closed format. Export a DXF first: in AutoCAD with Save As, in SolidWorks with Save As .dxf, in Fusion 360 by saving the sketch as DXF.
Is my drawing stored?
No. The demo service reads it in memory and discards it right after sending the result back.
Need it in your own software?
The same engine is available as an API: whole files instead of a preview, every export format, automation.
Related tools
Count pierces in a DXF
Pierces per contour, not per entity, for laser and plasma quotes. Open contours flagged.