Conversation
Two related problems when opening a model from Snapmaker Space while a project is already on the plate. First, the "Drop project file" dialog appears at all. Clicking "Open in Snapmaker Orca" already says which project to open, but the download is routed through Plater::load_files(const wxArrayString&), the drag-and-drop entry point, so open_3mf_file() escalates to the prompt whenever the plate is occupied. A cold launch opens the project without asking and a warm one interrogates the user, for the same action. The download path now passes from_url, which suppresses only that escalation. The global Load Behaviour setting is still honoured, so a user who chose "Always Ask" or "Load Geometry Only" still gets what they asked for, and load_project() still prompts about unsaved changes to the current project. Second, the dialog defaulted to the wrong action. It records the user's choice in "import_project_action" on OK but never read it back, because m_action was hardcoded to 2 (LoadGeometry). It now defaults to the stored choice, falling back to OpenProject rather than LoadGeometry: the dialog is shown for a project file, and importing geometry only silently discards the embedded printer, filament and process settings. The model still renders and slices, so the loss is invisible until the print comes out wrong, which is a poor default for the option a user is most likely to accept without reading.
KuzuriAo
marked this pull request as ready for review
September 11, 2026 06:00
This was referenced Sep 11, 2026
Closed
aceRage
added a commit
to aceRage/EdgeSlicer
that referenced
this pull request
Sep 16, 2026
…n-project-e8c3 fix(space): open URL downloads as project; default drop dialog to OpenProject (Snapmaker#856)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two related but independent problems that show up when opening a model from Snapmaker Space while a project is already on the plate. Fixing either one alone leaves the other.
Platform scope. Problem 1 is macOS specific in practice, because macOS delivers the URL to the already running instance through
MacOpenURL, so the model lands on an occupied plate. On Windows the click starts a new instance with an empty plate, so the escalation never triggers. Linux untested.Problem 2 is not platform specific. It affects anyone dragging a
.3mfonto an occupied plate, on any OS.1. The "Drop project file" dialog should not appear at all
Clicking "Open in Snapmaker Orca" on a Space page already tells the app which project to open. But the download is handed to
Plater::load_files(const wxArrayString&), which is the drag-and-drop entry point (its own comment says so), andopen_3mf_file()escalates to the prompt whenever the plate is not empty:So a cold launch opens the project without asking, and a warm one interrogates the user, for exactly the same action.
The download path now passes
from_url, which suppresses that escalation and nothing else:load_project()still callsclose_with_confirm(), so unsaved changes to the current project are still protected. That is the prompt that belongs here, and it already existed.2. The dialog defaulted to the destructive option
When the dialog does legitimately appear, it preselected "Import geometry only". It records the user's choice in
import_project_actionon OK, but never read it back, becausem_actionwas hardcoded to2(LoadGeometry).It now initializes from the stored choice, falling back to
OpenProjectrather thanLoadGeometry.That fallback matters.
LoadGeometrysetsload_config = 0, so the embedded printer, filament and process settings are dropped. On a multi-color model the practical result is that the paintwork is re-rendered in whatever filaments the previously loaded project happened to use, so the creator's color work is visibly lost rather than merely mis-referenced. The plate still renders and the model still slices, which is what makes it dangerous: nothing reports an error.It is a poor default for a dialog titled "Drop project file", and a particularly poor one for the option a user is most likely to accept without reading. That leads to something like this:
If the user correctly changed it to
Open as project, it would load properly:Testing
Built and run on macOS 26.6.2, Apple Silicon, Release build. Load Behaviour left at its default, "Ask When Relevant".
Confirmed:
.3mffrom Finder onto an occupied plate: dialog still appears, as it should, and now comes up with "Open as project" selected rather than "Import geometry only".Not exercised: Load Behaviour explicitly set to "Always Ask" or "Load Geometry Only". Those paths are untouched by this change (
from_urlonly suppresses the escalation toALWAYS_ASK, it does not override the stored setting), but I have not run them.Reproduction models for the original problem, both public on Snapmaker Space:
Note
This code is inherited from upstream OrcaSlicer and the same two problems exist there. I am happy to send it upstream as well, but the impact is sharpest here, since Snapmaker Space exists specifically to distribute tuned profiles and this is the path that discards them.