Skip to content

feat: add format conversion / Export As (Feature 4)#8

Merged
kraulerson merged 8 commits intomainfrom
feat/format-conversion
Apr 7, 2026
Merged

feat: add format conversion / Export As (Feature 4)#8
kraulerson merged 8 commits intomainfrom
feat/format-conversion

Conversation

@kraulerson
Copy link
Copy Markdown
Owner

Summary

  • Add Export As (Ctrl+Shift+S) to save current mesh as STL (binary), OBJ, 3MF, or PLY
  • Atomic writes (temp file + os.replace) prevent data loss on crash
  • Pre-export warning dialogs: symlink detection, overwrite source confirmation, OBJ normals recalculation
  • New mesh_exporter.py module with export_mesh(), check_symlink(), get_format_warning()
  • Round-trip tests verify geometry preserved across all format conversions

Test Plan

  • 225 tests passing (28 new for export)
  • ruff: clean
  • mypy: clean
  • Visual smoke test — Export As dialog, format selection, file creation verified
  • Feature recorded: 2/2 toward next UAT (UAT session required before Feature 5)

🤖 Generated with Claude Code

Karl Raulerson and others added 8 commits April 7, 2026 15:57
Export As via trimesh with atomic writes, symlink detection,
pre-export warning dialogs, and STL binary default. Approved
during brainstorming session.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6-task TDD plan: MeshExportError, export_mesh with atomic write,
symlink/warning tests, round-trip tests, MainWindow integration,
and manual smoke test.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…dation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…rnings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@kraulerson kraulerson merged commit cecec8b into main Apr 7, 2026
2 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant