Flat-pattern DXF for a laser shop: layers by role, dashed bend lines, bend notes, a file per body (#1324)
Closes #1284. sheet.export_dxf writes layers by role (OUTLINE, CUT, TEXT or ETCH, dashed BEND_UP/BEND_DOWN, optional BEND_NOTES, POCKET_<side>_Z…_MM and PERFORATION), inner contours before the outline; text: cut|etch, bend_notes and note_height, per_body files. Letters are derived from the timeline, nothing new is saved (format unchanged). I merged main in (the export's parameter list keeps main's pocket layer names). Checked on main + this branch: cargo check --workspace, the engine cmd::sheet tests (160) and the io DXF tests.
This commit is contained in:
1 parent
9fbbf8dc3a
commit
d7a4a29ce3
8 files changed
+887
-58
No files matched your search
@@ -185,13 +185,51 @@ consume an undo step.
|
||||
{"command":"sheet.export_dxf","params":{"path":"bracket-flat.dxf"}}
|
||||
```
|
||||
|
||||
The DXF is an AutoCAD 2000 (`AC1015`) drawing in millimetres. The `OUTLINE`, `BEND_UP` and
|
||||
`BEND_DOWN` layers separate cuts from bend centres. A round hole is a `CIRCLE`, a circular arc an
|
||||
`ARC`, a whole ellipse one `ELLIPSE` and an arc of an ellipse an elliptical `ELLIPSE`; the pieces
|
||||
of a spline, the outlines of text and the other conics are `SPLINE`s of their own degree, so no
|
||||
curve is written as chords. For a machine that reads only lines and arcs, pass
|
||||
`"curves": "arcs"` to `sheet.export_dxf`: the free-form curves are then tangent arcs and lines
|
||||
within 0.001 mm.
|
||||
The DXF is an AutoCAD 2000 (`AC1015`) drawing in millimetres, made for a laser-cutting shop's
|
||||
nesting or CAM software: each kind of line is on a layer of its own, with a colour (AutoCAD's
|
||||
index) and, for the bends, a linetype that the file defines.
|
||||
|
||||
| Layer | Colour | Line | Holds |
|
||||
|---|---|---|---|
|
||||
| `OUTLINE` | 7 white or black | continuous | the outer contour of each piece of the sheet |
|
||||
| `CUT` | 4 cyan | continuous | what is cut out inside it: holes, slots, and the loose pieces a cut leaves (the middle of a ring) |
|
||||
| `TEXT` | 2 yellow | continuous | the letters that text cut through the sheet, with their counters; only with `"text": "cut"`, the default |
|
||||
| `ETCH` | 6 magenta | continuous | letters as single contours, to be marked and not cut: `"text": "etch"`, and always text machined to a depth |
|
||||
| `BEND_UP`, `BEND_DOWN` | 1 red, 5 blue | `DASHED` | the bend centre lines, by direction |
|
||||
| `BEND_NOTES` | 8 grey | continuous | the note beside each bend line, only with `"bend_notes": true` |
|
||||
| `POCKET_…` | 3 green | continuous | pockets, a layer for each depth (see below) |
|
||||
| `PERFORATION` | 3 green | continuous | the holes of a perforation field |
|
||||
|
||||
`OUTLINE`, `CUT`, `BEND_UP` and `BEND_DOWN` are always in the layer table, the others when the
|
||||
sheet has something for them. The inner contours (`CUT`, `TEXT`) are written before the outline,
|
||||
so a program that follows the file's order cuts inside-out.
|
||||
|
||||
A round hole is a `CIRCLE`, a circular arc an `ARC`, a whole ellipse one `ELLIPSE` and an arc of
|
||||
an ellipse an elliptical `ELLIPSE`; the pieces of a spline, the outlines of text and the other
|
||||
conics are `SPLINE`s of their own degree, so no curve is written as chords. For a machine that
|
||||
reads only lines and arcs, pass `"curves": "arcs"` to `sheet.export_dxf`: the free-form curves
|
||||
are then tangent arcs and lines within 0.001 mm.
|
||||
|
||||
Letters are told from other cut-outs by where they came from: a cut whose sketch holds text
|
||||
(Sketch Text) marks the cut-outs it makes as letters, counters included, while the design is
|
||||
built; nothing more is saved in the design file. A letter that another cut-out overlaps, or
|
||||
that the sheet's edge clips, has become one shape with it and stays on `CUT`.
|
||||
|
||||
```json
|
||||
{"command":"sheet.export_dxf","params":{"path":"tray-flat.dxf","text":"etch","bend_notes":true}}
|
||||
```
|
||||
|
||||
With `"bend_notes": true` each bend line gets a note on `BEND_NOTES`, `B1 UP 90° R1` (the bend's
|
||||
number, its direction, its angle and its inner radius; `%%d` is AutoCAD's degree sign). It is 3 mm
|
||||
high (`"note_height"` changes that), centred half a height beside the middle of the line,
|
||||
parallel to it and readable from below or from the right. A bend that cut-outs split has a note
|
||||
for each piece. Notes are off by default, because a program that cuts or marks every layer would
|
||||
mark them.
|
||||
|
||||
A design with several sheet bodies exports one file for each with `"per_body": true`: the files
|
||||
are `<path>-<body>.dxf` (characters a file name cannot hold become `_`; two bodies that would
|
||||
share a name get `_2`, `_3`…), and the reply lists them in `files`. Without a `path` it lists
|
||||
their DXF texts instead.
|
||||
|
||||
Base-flange profiles keep their interior holes. Through cuts that cross a sheet edge become
|
||||
notches in the flat outline; overlapping and repeated cuts remove their combined area once.
|
||||
@@ -225,7 +263,8 @@ become a through hole wherever they remove the whole thickness. Flat-pattern JSO
|
||||
`pockets` with their side, depth and bottom/top thickness coordinates in millimetres.
|
||||
DXF pocket boundaries use `POCKET_BOTTOM_Z…_TO_…_MM`, `POCKET_TOP_Z…_TO_…_MM`, or
|
||||
`POCKET_INTERNAL_Z…_TO_…_MM` layers. These are machining operations, so do not treat every
|
||||
pocket layer as a through-cut contour when importing the drawing into a CAM tool.
|
||||
pocket layer as a through-cut contour when importing the drawing into a CAM tool. (Text
|
||||
machined to a depth is a marking, on `ETCH`.)
|
||||
|
||||
Extrude Intersect on a straight base or an unfolded sheet retains the material inside both
|
||||
the current tool footprint and its depth interval, including interior holes, detached islands
|
||||
|
||||
Reference in new issue
Block a user