Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
dfe4df7
import SVG: add option to import layers
pgilfernandez Feb 20, 2026
13de30c
import SVG: simplified GUI and improved UX
pgilfernandez Feb 20, 2026
e54805a
import SVG: improved GUI/UX and added layer type option (Part, Negati…
pgilfernandez Feb 20, 2026
f697e07
import SVG: add layer-based import UI with per-layer type and robust …
pgilfernandez Feb 20, 2026
a8b26c7
import SVG: fix layer names in list
pgilfernandez Feb 20, 2026
b01c2d5
import SVG: take into account hidden layers in SVG files
pgilfernandez Feb 20, 2026
41d7b59
import SVG: "Add shape / SVG" opens now Plater dialog
pgilfernandez Feb 21, 2026
1be0f69
import SVG: simplify GLGizmoSVG to importing just a merged layer sele…
pgilfernandez Feb 21, 2026
6407286
import SVG: no layer SVG fallback for GLGizmoSVG
pgilfernandez Feb 21, 2026
393eff9
import SVG: add "from" and "to" to layer list
pgilfernandez Feb 21, 2026
2ef98b8
import SVG: disable options when "merged" mode is selected
pgilfernandez Feb 21, 2026
99800cb
import SVG: tweak some Plater GUI elements
pgilfernandez Feb 21, 2026
368dffa
import SVG: added tooltips to elements of new popup windows
pgilfernandez Feb 21, 2026
3b6ac56
import SVG: some more GUI/UX tweaks
pgilfernandez Feb 21, 2026
5fca014
import SVG: preserve layer selection in gizmo scaling on "edit SVG" f…
pgilfernandez Feb 21, 2026
b92544a
import SVG: fix layers selection no updating after loading saved 3MF …
pgilfernandez Feb 22, 2026
bb3abf0
import SVG: reverse layer listing to match SVG file and some GUI tweaks
pgilfernandez Feb 22, 2026
cbf3cd7
import SVG: fix editing "size" in "Edit SVG" floating panel
pgilfernandez Feb 22, 2026
74ff92d
import SVG: tweak GUI
pgilfernandez Feb 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions src/slic3r/GUI/GUI_Factories.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "wx/dcclient.h"
#include "slic3r/Utils/MacDarkMode.hpp"
#endif
#include <wx/filedlg.h>

// ----------------------------------------------------------------------------
// MenuWithSeparators
Expand Down Expand Up @@ -618,6 +619,44 @@ void MenuFactory::append_menu_item_add_text(wxMenu* menu, ModelVolumeType type,
}

void MenuFactory::append_menu_item_add_svg(wxMenu *menu, ModelVolumeType type, bool is_submenu_item /* = true*/){
if (type == ModelVolumeType::INVALID) {
auto add_svg_shape = [](const wxCommandEvent &) {
wxFileDialog dialog(wxGetApp().GetTopWindow(),
_L("Choose one or more SVG files:"),
from_u8(wxGetApp().app_config->get_last_dir()), "",
file_wildcards(FT_SVG), wxFD_OPEN | wxFD_MULTIPLE | wxFD_FILE_MUST_EXIST);
if (dialog.ShowModal() != wxID_OK)
return;

wxArrayString input_files;
dialog.GetPaths(input_files);
if (input_files.IsEmpty())
return;

std::vector<std::string> paths;
paths.reserve(input_files.size());
for (const auto &input_file : input_files)
paths.emplace_back(input_file.ToUTF8().data());

wxString snapshot_label = (paths.size() == 1) ? _L("Import Object") : _L("Import Objects");
snapshot_label += ": ";
snapshot_label += wxString::FromUTF8(boost::filesystem::path(paths.front()).filename().string().c_str());
for (size_t i = 1; i < paths.size(); ++i) {
snapshot_label += ", ";
snapshot_label += wxString::FromUTF8(boost::filesystem::path(paths[i]).filename().string().c_str());
}

Plater::TakeSnapshot snapshot(wxGetApp().plater(), snapshot_label);
wxGetApp().plater()->load_files(paths, true, false);
};

wxString item_name = _L("SVG");
menu->AppendSeparator();
const std::string icon_name = "";
append_menu_item(menu, wxID_ANY, item_name, "", add_svg_shape, icon_name, menu);
return;
}

append_menu_itemm_add_(_L("SVG"), GLGizmosManager::Svg, menu, type, is_submenu_item);
}

Expand Down
Loading