Save as mesh: one dialog for STL and 3MF, with Send to slicer (#1272)

One docked Save as mesh dialog replaces Export STL / 3MF / 3MF with face tags, with an optional Send to slicer that lists the slicers installed on this machine. Engine: file.save_mesh and file.slicers; the Convert Mesh dialog goes (mesh.convert and the MeshConvert feature stay, so existing designs open). Strings in all catalogs; screenshots in the PR. Checked on main + this branch: cargo check --workspace, the engine slicer/mesh/file tests, the UI catalog and menu tests and scenario s14 (the one local colour-token failure is epaint's TexturesDelta panic, which main shows on this machine too).
This commit is contained in:
froglemonade2 authored and GitHub committed 2026-10-15 03:51:28 -04:00
1 parent 3e13eb6392
commit 0872eb959a
28 files changed
+1483 -100

No files matched your search

+8 -13
View File
@@ -16,21 +16,16 @@ Opening a STEP or IGES file creates a design with the file's bodies as a base fe
inserting one adds them to the current design. Later features build on them. Mesh bodies render,
measure, move and export, but solid features need B-rep bodies.
For closed mechanical meshes with a constant cross-section, use **Mesh → Modify →
Convert Mesh**. Select the mesh body and set the fitting tolerance. The conversion
rebuilds planar faces and circular through-walls, replacing the mesh with a solid
that accepts solid modeling operations. The imported triangles remain embedded
upstream: changing their scale, undoing the conversion or reopening the design
rebuilds the result through the timeline. Double-click the conversion to edit its
tolerance or source body.
**File → Save as mesh…** (also on the Mesh tab under Modify, and in the right-click menu of a
body) saves the selected bodies as STL, 3MF or 3MF with face tags (below). With **Send to slicer** ticked, it writes the file to
a temporary folder and opens it in the chosen slicer instead of asking for a file name. The slicer
list shows the slicers found on the computer with their icons; **Custom…** adds any other program
to the top of the list (kept between runs; hover an entry you added and press Delete to remove it).
The tolerance bounds circular reconstruction against the original chords. Coarse
polygons remain polygons when rounding would exceed it. Open/nonmanifold meshes,
tapers, stepped parts and organic scans are refused by this first reconstruction
method; it does not silently substitute a faceted solid. Conversion currently
accepts at most 50,000 triangles and a bounded number of boundary segments.
Closed mechanical meshes with a constant cross-section can be rebuilt as solids with the
`mesh.convert` command (command palette, scripts and the control channel).
**File → Export 3MF with Face Tags** (`file.export` with `format: "3mf-tagged"`) writes an
**File → Save as mesh…** with the format **3MF with face tags** (`file.export` or `file.save_mesh` with `format: "3mf-tagged"`) writes an
ordinary 3MF in which every triangle also names the B-rep face it lies on and every coordinate
is the tessellation's own double-precision value. Meshing and analysis tools can use the tags to
keep a model's faces (for loads, boundary conditions or feature edges); other 3MF readers ignore
+1 -1
View File
@@ -7,7 +7,7 @@ A tessellated body loses its faces: a plain mesh says where the surface is, not
each triangle came from. Downstream tools that mesh or analyse a part need that back. They apply
loads and boundary conditions to faces, keep face boundaries as feature edges, and group
results by face. SolidCraft therefore exports a 3MF in which every triangle carries the index of
the B-rep face it lies on (**File → Export 3MF with Face Tags**, or `file.export` with
the B-rep face it lies on (**File → Save as mesh…** (format **3MF with face tags**), or `file.export` with
`format: "3mf-tagged"`).
## Why 3MF