forked from 1b-agent/opencadstudio-upstream
web: enable STL/STEP export and OBJ import, drag-and-drop open
STLOUT/STEPOUT wrote via std::fs and IMPORTOBJ read via std::fs, all
of which fail on wasm32. The export pickers now mirror the PDF path
(pick_*_owned returns a name-only PathBuf; the browser download names
the file) and the write tail swaps fs::write for sys::download_bytes.
OBJ import reads the picked file's bytes directly, like the web open
picker.
Opening by drag-and-drop was dead on the web build: winit never emits
FileDropped there. A wasm-gated io::web_drop module installs DOM
dragover/drop listeners, filters .dwg/.dxf, reads the File bytes
async, and queues them; the existing 50 ms PollWebControl tick drains
the queue into the same open path the picker uses (progress overlay,
recovery, OPFS recent cache).
Also floors the model-space plot sheet: extents smaller than 10 mm
(or the 0x0 paper a fresh unsaved drawing carries) now fall back to
the standard sheet instead of producing a ~3 pt page.
(cherry picked from commit ad60be11ed)
This commit is contained in:
1 parent
112060e370
commit
6cb8c00fa0
8 files changed
+332
-36
No files matched your search
@@ -252,6 +252,13 @@ pub fn build_step(meshes: &[&MeshModel]) -> Option<String> {
|
||||
Some(file)
|
||||
}
|
||||
|
||||
/// Web: no save dialog — the export continues with a virtual filename and
|
||||
/// the generated bytes are delivered as a browser download.
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
pub async fn pick_step_path_owned(stem: String) -> Option<std::path::PathBuf> {
|
||||
Some(std::path::PathBuf::from(format!("{stem}.step")))
|
||||
}
|
||||
|
||||
/// Returns an ISO 8601-like timestamp string for the STEP file header.
|
||||
fn chrono_timestamp() -> String {
|
||||
// Use seconds since Unix epoch for a simple timestamp without chrono dep.
|
||||
|
||||
Reference in new issue
Block a user