Export: ExportCommand/CLI --out/MCP export with .3mf write a 3MF Core package ([Content_Types].xml, _rels/.rels, 3D/3dmodel.model; millimetres), one mesh object and build item per body, named after it, vertices shared and welded watertight (T-junctions between faces split), base-material colours when bodies carry one (STEP colours now ride on bodies). Tessellation as for STL. File > Export 3MF. Import: doc.open/drag-drop/CLI/MCP open accept .3mf and .stl; Insert Mesh (ParaMeshInsertAlignCommand) adds them to a design as a MeshImport feature. Kernel mesh bodies render, measure exactly, move and export; solid features refuse them with a clear error. 3MF reading flattens components and build transforms, converts units, reads colours; sizes, entries, nesting and element counts are capped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL
81 lines
2.3 KiB
TOML
81 lines
2.3 KiB
TOML
[workspace]
|
|
resolver = "3"
|
|
members = ["crates/*", "apps/*", "xtask"]
|
|
# Third-party code kept with local fixes (see vendor/README.md); not linted as ours.
|
|
exclude = ["vendor"]
|
|
|
|
[workspace.package]
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.90"
|
|
authors = ["SolveCraft contributors"]
|
|
repository = "https://github.com/storytold/solvecraft"
|
|
|
|
[workspace.dependencies]
|
|
# internal
|
|
solvecraft-geom = { path = "crates/geom" }
|
|
solvecraft-sketch = { path = "crates/sketch" }
|
|
solvecraft-kernel = { path = "crates/kernel" }
|
|
solvecraft-render = { path = "crates/render" }
|
|
solvecraft-doc = { path = "crates/doc" }
|
|
solvecraft-io = { path = "crates/io" }
|
|
solvecraft-engine = { path = "crates/engine" }
|
|
solvecraft-ui-egui = { path = "crates/ui-egui" }
|
|
solvecraft-mcp = { path = "crates/mcp" }
|
|
|
|
# foundation
|
|
thiserror = "2"
|
|
serde = { version = "1", features = ["derive", "rc"] }
|
|
serde_json = { version = "1", features = ["float_roundtrip"] }
|
|
log = "0.4"
|
|
|
|
# geometry kernel (Apache-2.0; see plan/adr/0001-geometry-kernel.md). Only crates/kernel uses it.
|
|
truck-modeling = "0.6"
|
|
truck-shapeops = { version = "0.4", default-features = false }
|
|
truck-meshalgo = { version = "0.4", default-features = false, features = ["tessellation", "analyzers"] }
|
|
truck-stepio = { version = "0.3", default-features = false }
|
|
truck-topology = "0.6"
|
|
|
|
# packages (3MF)
|
|
zip = { version = "3", default-features = false, features = ["deflate"] }
|
|
quick-xml = "0.38"
|
|
|
|
# images
|
|
image = { version = "0.25", default-features = false, features = ["png"] }
|
|
|
|
# ui
|
|
egui = "0.36"
|
|
eframe = { version = "0.36", default-features = false }
|
|
# Instant/SystemTime that also work in the browser (std panics on wasm32-unknown-unknown).
|
|
web-time = "1"
|
|
egui-wgpu = "0.36"
|
|
rfd = "0.17"
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "forbid"
|
|
|
|
[workspace.lints.clippy]
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
too_many_arguments = "allow"
|
|
type_complexity = "allow"
|
|
# `!(x > tol)` is our idiom for "not a usable number" (NaN-safe).
|
|
neg_cmp_op_on_partial_ord = "allow"
|
|
|
|
[profile.dev.package."*"]
|
|
opt-level = 2
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
|
|
[profile.release]
|
|
opt-level = 3
|
|
lto = "thin"
|
|
codegen-units = 16
|
|
debug = 0
|
|
|
|
# truck-shapeops with SolveCraft fixes (Apache-2.0, see vendor/truck-shapeops and ATTRIBUTION.md).
|
|
[patch.crates-io]
|
|
truck-shapeops = { path = "vendor/truck-shapeops" }
|