OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
TextureImportDialog.cpp File Reference
#include <array>
#include <cstdlib>
#include <functional>
#include <glad/gl.h>
#include "OpenGLManager.hpp"
#include "TextureImportDialog.hpp"
#include "I18N.hpp"
#include "format.hpp"
#include "GUI_App.hpp"
#include "MsgDialog.hpp"
#include "ColorDecomposeDialog.hpp"
#include "ColorPickerDialog.hpp"
#include "libslic3r/Color.hpp"
#include <optional>
#include <variant>
#include <wx/weakref.h>
#include "ColorDecomposeSupport.hpp"
#include "Widgets/StateColor.hpp"
#include "Widgets/StaticLine.hpp"
#include "libslic3r/ColorDecomposeRecipe.hpp"
#include "libslic3r/MeshRepair.hpp"
#include "libslic3r/TriangleSelector.hpp"
#include <utility>
#include <string>
#include "libslic3r/Config.hpp"
#include "slic3r/GUI/Widgets/PopupWindow.hpp"
#include <vector>
#include "slic3r/GUI/wxExtensions.hpp"
#include <math.h>
#include "slic3r/GUI/GUI_Utils.hpp"
#include "libslic3r/TexturePainting.hpp"
#include "slic3r/GUI/Widgets/SpinInput.hpp"
#include <slic3r/GUI/Widgets/Button.hpp>
#include <slic3r/GUI/Widgets/Label.hpp>
#include "libslic3r/TriangleMesh.hpp"
#include <memory>
#include <mutex>
#include <wx/button.h>
#include <wx/colour.h>
#include <wx/dc.h>
#include <wx/dcclient.h>
#include <wx/dcbuffer.h>
#include <wx/dialog.h>
#include <wx/display.h>
#include <wx/event.h>
#include <wx/evtloop.h>
#include <wx/settings.h>
#include <wx/gdicmn.h>
#include <wx/panel.h>
#include <wx/popupwin.h>
#include <wx/glcanvas.h>
#include <wx/image.h>
#include <wx/sizer.h>
#include <wx/object.h>
#include <wx/spinctrl.h>
#include <wx/progdlg.h>
#include <wx/peninfobase.h>
#include <wx/statline.h>
#include <wx/scrolwin.h>
#include <wx/msgdlg.h>
#include <wx/string.h>
#include <wx/toplevel.h>
#include <wx/utils.h>
#include <wx/valtext.h>
#include <algorithm>
#include <cctype>
#include <cstring>
#include <cmath>
#include <limits>
#include <map>
#include <set>
#include <sstream>
#include <boost/log/trivial.hpp>
#include <wx/window.h>
#include <wx/busycursor.h>

Go to the source code of this file.

Classes

class  ScopedInteractiveBusyCursorSuspender
class  AccentSlider
class  Slic3r::GUI::FilamentSelectPopup
class  Slic3r::GUI::AutoMixSelectPopup

Namespaces

namespace  Slic3r
 |/ Copyright (c) Prusa Research 2020 - 2023 Enrico Turri @enricoturri1966 |/ |/ PrusaSlicer is released under the terms of the AGPLv3 or higher |/
namespace  Slic3r::GUI

Functions

static bool is_dark ()
static wxColour texture_import_gray9000 ()
static wxColour texture_import_text_colour ()
static wxColour texture_import_separator_colour ()
static wxFont texture_import_section_title_font (wxWindow *win)
static wxSize gl_viewport_size (wxWindow *win, const wxSize &logical_size)
static bool needs_filament_swatch_border (const wxColour &colour)
static wxColour filament_swatch_border_colour ()
static void draw_filament_swatch_border (wxDC &dc, const wxColour &colour, int x, int y, int w, int h, int radius=0)
static void draw_filament_swatch_ellipse_border (wxDC &dc, const wxColour &colour, int x, int y, int w, int h)
static wxString ellipsize_text (wxDC &dc, wxString text, int max_width)
 Slic3r::GUI::wxDEFINE_EVENT (EVT_TEXTURE_COMPUTE_DONE, wxCommandEvent)
 Slic3r::GUI::wxDEFINE_EVENT (EVT_TEXTURE_COMPUTE_PROGRESS, wxCommandEvent)
 Slic3r::GUI::wxDEFINE_EVENT (EVT_TEXTURE_COMPUTE_ERROR, wxCommandEvent)
 Slic3r::GUI::wxDEFINE_EVENT (EVT_TEXTURE_MESH_REPAIR_DECISION, wxCommandEvent)
static std::array< float, 4 > Slic3r::GUI::parse_color_string (const std::string &hex)
static wxString Slic3r::GUI::rgb_to_hex (const std::array< std::size_t, 3 > &c)
static wxString Slic3r::GUI::filament_name_to_wx_string (const std::string &name)
static std::string Slic3r::GUI::texture_normalize_color_hex (std::string hex)
static std::string Slic3r::GUI::texture_rgba_to_hex (const std::array< float, 4 > &rgba)
static bool Slic3r::GUI::texture_entry_is_physical (TextureFilamentKind kind)
static bool Slic3r::GUI::texture_entry_is_mixed (TextureFilamentKind kind)
static bool Slic3r::GUI::texture_entry_is_pla_basic (const TextureFilamentEntry &entry)
static bool Slic3r::GUI::texture_entry_official_basic (const TextureFilamentEntry &entry)
static Slic3r::ColorDecomposeRecipeMode Slic3r::GUI::texture_recipe_mode (TextureAutoMixMode mode)
static bool Slic3r::GUI::starts_with_preset_name (const std::string &name, const char *prefix)
static std::string Slic3r::GUI::resolve_default_virtual_filament_preset_name ()
static wxString Slic3r::GUI::auto_mix_mode_label (TextureAutoMixMode mode)
static void Slic3r::GUI::convert_face_colors (const std::vector< std::array< std::size_t, 3 > > &src, std::vector< std::array< float, 3 > > &dst)
 Slic3r::GUI::wxBEGIN_EVENT_TABLE (TextureImportDialog, DPIDialog) wxEND_EVENT_TABLE() TextureImportDialog

Variables

static constexpr const char * DEFAULT_VIRTUAL_FILAMENT_BASIC_TYPE = "PLA Basic"
static constexpr const char * DEFAULT_VIRTUAL_FILAMENT_SHORT_TYPE = "PLA"
static constexpr const char * DEFAULT_VIRTUAL_FILAMENT_NAME = "Bambu PLA Basic"
static constexpr const char * SEPARATOR_COLOUR_KEY = "#CECECE"

Function Documentation

◆ draw_filament_swatch_border()

void draw_filament_swatch_border ( wxDC & dc,
const wxColour & colour,
int x,
int y,
int w,
int h,
int radius = 0 )
static
169{
170 if (!needs_filament_swatch_border(colour))
171 return;
172
173 dc.SetPen(wxPen(filament_swatch_border_colour(), 1));
174 dc.SetBrush(*wxTRANSPARENT_BRUSH);
175 if (radius > 0)
176 dc.DrawRoundedRectangle(x, y, w, h, radius);
177 else
178 dc.DrawRectangle(x, y, w, h);
179}
static wxColour filament_swatch_border_colour()
Definition TextureImportDialog.cpp:162
static bool needs_filament_swatch_border(const wxColour &colour)
Definition TextureImportDialog.cpp:155

References filament_swatch_border_colour(), and needs_filament_swatch_border().

Referenced by Slic3r::GUI::FilamentSelectPopup::create_item_row(), Slic3r::GUI::FilamentSelectPopup::create_mixed_item_row(), and Slic3r::GUI::TextureImportDialog::rebuild_mapping_rows().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ draw_filament_swatch_ellipse_border()

void draw_filament_swatch_ellipse_border ( wxDC & dc,
const wxColour & colour,
int x,
int y,
int w,
int h )
static
183{
184 if (!needs_filament_swatch_border(colour))
185 return;
186
187 dc.SetPen(wxPen(filament_swatch_border_colour(), 1));
188 dc.SetBrush(*wxTRANSPARENT_BRUSH);
189 dc.DrawEllipse(x, y, w, h);
190}

References filament_swatch_border_colour(), and needs_filament_swatch_border().

Referenced by Slic3r::GUI::TextureImportDialog::rebuild_mapping_rows().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ellipsize_text()

wxString ellipsize_text ( wxDC & dc,
wxString text,
int max_width )
static
193{
194 if (max_width <= 0)
195 return wxEmptyString;
196 if (dc.GetTextExtent(text).x <= max_width)
197 return text;
198
199 const wxString ellipsis = "...";
200 while (!text.empty() && dc.GetTextExtent(text + ellipsis).x > max_width)
201 text.RemoveLast();
202 if (text.empty() && dc.GetTextExtent(ellipsis).x > max_width)
203 return wxString();
204 return text + ellipsis;
205}

Referenced by Slic3r::GUI::FilamentSelectPopup::create_item_row(), and Slic3r::GUI::TextureImportDialog::rebuild_mapping_rows().

Here is the caller graph for this function:

◆ filament_swatch_border_colour()

wxColour filament_swatch_border_colour ( )
static
163{
164 return is_dark() ? wxColour(207, 207, 207) : wxColour(130, 130, 128);
165}
static bool is_dark()
Definition TextureImportDialog.cpp:85

References is_dark().

Referenced by draw_filament_swatch_border(), and draw_filament_swatch_ellipse_border().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gl_viewport_size()

wxSize gl_viewport_size ( wxWindow * win,
const wxSize & logical_size )
static
114{
115 wxSize viewport_size = logical_size;
116#ifdef __APPLE__
117 const double scale = win ? win->GetContentScaleFactor() : 1.0;
118 if (scale > 0.0) {
119 viewport_size.x = std::max(1, (int)std::round(viewport_size.x * scale));
120 viewport_size.y = std::max(1, (int)std::round(viewport_size.y * scale));
121 }
122#else
123 (void)win;
124#endif
125 return viewport_size;
126}
int scale(const int val)
Definition WipeTowerDialog.cpp:58

References scale().

Referenced by Slic3r::GUI::TexturePreviewCanvas::render().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_dark()

bool is_dark ( )
static
85{ return Slic3r::GUI::wxGetApp().dark_mode(); }

Referenced by Slic3r::GUI::AboutDialog::AboutDialog(), Slic3r::GUI::TroubleshootDialog::TroubleshootDialog(), Slic3r::GUI::AuiMgr::apply_color_mode(), filament_swatch_border_colour(), needs_filament_swatch_border(), Slic3r::GUI::Bed3D::on_change_color_mode(), Slic3r::GUI::DailyTipsDataRenderer::on_change_color_mode(), Slic3r::GUI::DailyTipsPanel::on_change_color_mode(), Slic3r::GUI::DailyTipsWindow::on_change_color_mode(), Slic3r::GUI::GCodeViewer::on_change_color_mode(), Slic3r::GUI::GCodeViewer::SequentialView::GCodeWindow::on_change_color_mode(), Slic3r::GUI::GCodeViewer::SequentialView::Marker::on_change_color_mode(), Slic3r::GUI::GLCanvas3D::on_change_color_mode(), Slic3r::GUI::GLGizmoBase::on_change_color_mode(), Slic3r::GUI::GLGizmosManager::on_change_color_mode(), Slic3r::GUI::ImGuiWrapper::on_change_color_mode(), Slic3r::GUI::IMSlider::on_change_color_mode(), Slic3r::GUI::NotificationManager::on_change_color_mode(), Slic3r::GUI::NotificationManager::PopNotification::on_change_color_mode(), Slic3r::GUI::NotificationManager::SlicingProgressNotification::on_change_color_mode(), Slic3r::GUI::PartPlateList::on_change_color_mode(), Slic3r::GUI::Sidebar::on_change_color_mode(), Slic3r::GUI::Sidebar::operator=(), Slic3r::GUI::plate_toolbar_hover_color(), Slic3r::GUI::Bed3D::point_projection(), Slic3r::GUI::push_plate_toolbar_scrollbar_style(), Slic3r::GUI::TexturePreviewCanvas::render_reset_overlay(), Slic3r::GUI::Bed_2D::repaint(), Button::SetStyle(), Slic3r::GUI::GLGizmoUtils::toolbar_circular_button(), and Slic3r::GUI::Sidebar::update_mixed_filament_list().

Here is the caller graph for this function:

◆ needs_filament_swatch_border()

bool needs_filament_swatch_border ( const wxColour & colour)
static
156{
157 if (is_dark())
158 return colour.Red() < 45 && colour.Green() < 45 && colour.Blue() < 45;
159 return colour.Red() > 224 && colour.Green() > 224 && colour.Blue() > 224;
160}

References is_dark().

Referenced by draw_filament_swatch_border(), and draw_filament_swatch_ellipse_border().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ texture_import_gray9000()

wxColour texture_import_gray9000 ( )
static
88{
89 return wxColour(38, 46, 48);
90}

Referenced by Slic3r::GUI::FilamentSelectPopup::create_mixed_item_row(), and texture_import_text_colour().

Here is the caller graph for this function:

◆ texture_import_section_title_font()

wxFont texture_import_section_title_font ( wxWindow * win)
static
107{
108 wxFont font = win ? win->GetFont() : wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
109 font.MakeBold();
110 return font;
111}

Referenced by Slic3r::GUI::TextureImportDialog::build_bottom_buttons(), and Slic3r::GUI::TextureImportDialog::build_params_panel().

Here is the caller graph for this function:

◆ texture_import_separator_colour()

wxColour texture_import_separator_colour ( )
static
102{
104}
static constexpr const char * SEPARATOR_COLOUR_KEY
Definition TextureImportDialog.cpp:99
static wxColour darkModeColorFor(wxColour const &color)
Definition StateColor.cpp:219

References StateColor::darkModeColorFor(), and SEPARATOR_COLOUR_KEY.

Referenced by Slic3r::GUI::TextureImportDialog::build_preview_panel(), and Slic3r::GUI::TextureImportDialog::build_ui().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ texture_import_text_colour()

wxColour texture_import_text_colour ( )
static
93{
95}
static wxColour texture_import_gray9000()
Definition TextureImportDialog.cpp:87

References StateColor::darkModeColorFor(), and texture_import_gray9000().

Referenced by Slic3r::GUI::AutoMixSelectPopup::create_item_row(), Slic3r::GUI::FilamentSelectPopup::create_item_row(), Slic3r::GUI::FilamentSelectPopup::create_mixed_item_row(), and Slic3r::GUI::TextureImportDialog::rebuild_mapping_rows().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ DEFAULT_VIRTUAL_FILAMENT_BASIC_TYPE

const char* DEFAULT_VIRTUAL_FILAMENT_BASIC_TYPE = "PLA Basic"
staticconstexpr

◆ DEFAULT_VIRTUAL_FILAMENT_NAME

◆ DEFAULT_VIRTUAL_FILAMENT_SHORT_TYPE

const char* DEFAULT_VIRTUAL_FILAMENT_SHORT_TYPE = "PLA"
staticconstexpr

◆ SEPARATOR_COLOUR_KEY