Small refactoring in GLCanvas3D::LayersEditing

This commit is contained in:
enricoturri1966 2021-04-28 08:49:32 +02:00
parent b600540411
commit a83cd647da
2 changed files with 31 additions and 52 deletions

View file

@ -135,27 +135,9 @@ void Size::set_scale_factor(int scale_factor)
m_scale_factor = scale_factor; m_scale_factor = scale_factor;
} }
GLCanvas3D::LayersEditing::LayersEditing()
: m_enabled(false)
, m_z_texture_id(0)
, m_model_object(nullptr)
, m_object_max_z(0.f)
, m_slicing_parameters(nullptr)
, m_layer_height_profile_modified(false)
, m_adaptive_quality(0.5f)
, state(Unknown)
, band_width(2.0f)
, strength(0.005f)
, last_object_id(-1)
, last_z(0.0f)
, last_action(LAYER_HEIGHT_EDIT_ACTION_INCREASE)
{
}
GLCanvas3D::LayersEditing::~LayersEditing() GLCanvas3D::LayersEditing::~LayersEditing()
{ {
if (m_z_texture_id != 0) if (m_z_texture_id != 0) {
{
glsafe(::glDeleteTextures(1, &m_z_texture_id)); glsafe(::glDeleteTextures(1, &m_z_texture_id));
m_z_texture_id = 0; m_z_texture_id = 0;
} }
@ -219,7 +201,7 @@ void GLCanvas3D::LayersEditing::set_enabled(bool enabled)
m_enabled = is_allowed() && enabled; m_enabled = is_allowed() && enabled;
} }
float GLCanvas3D::LayersEditing::s_overelay_window_width; float GLCanvas3D::LayersEditing::s_overlay_window_width;
void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) const void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) const
{ {
@ -303,7 +285,7 @@ void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) const
if (imgui.button(_L("Reset"))) if (imgui.button(_L("Reset")))
wxPostEvent((wxEvtHandler*)canvas.get_wxglcanvas(), SimpleEvent(EVT_GLCANVAS_RESET_LAYER_HEIGHT_PROFILE)); wxPostEvent((wxEvtHandler*)canvas.get_wxglcanvas(), SimpleEvent(EVT_GLCANVAS_RESET_LAYER_HEIGHT_PROFILE));
GLCanvas3D::LayersEditing::s_overelay_window_width = ImGui::GetWindowSize().x /*+ (float)m_layers_texture.width/4*/; GLCanvas3D::LayersEditing::s_overlay_window_width = ImGui::GetWindowSize().x /*+ (float)m_layers_texture.width/4*/;
imgui.end(); imgui.end();
const Rect& bar_rect = get_bar_rect_viewport(canvas); const Rect& bar_rect = get_bar_rect_viewport(canvas);
@ -320,7 +302,7 @@ float GLCanvas3D::LayersEditing::get_cursor_z_relative(const GLCanvas3D& canvas)
float t = rect.get_top(); float t = rect.get_top();
float b = rect.get_bottom(); float b = rect.get_bottom();
return ((rect.get_left() <= x) && (x <= rect.get_right()) && (t <= y) && (y <= b)) ? return (rect.get_left() <= x && x <= rect.get_right() && t <= y && y <= b) ?
// Inside the bar. // Inside the bar.
(b - y - 1.0f) / (b - t - 1.0f) : (b - y - 1.0f) / (b - t - 1.0f) :
// Outside the bar. // Outside the bar.
@ -330,7 +312,7 @@ float GLCanvas3D::LayersEditing::get_cursor_z_relative(const GLCanvas3D& canvas)
bool GLCanvas3D::LayersEditing::bar_rect_contains(const GLCanvas3D& canvas, float x, float y) bool GLCanvas3D::LayersEditing::bar_rect_contains(const GLCanvas3D& canvas, float x, float y)
{ {
const Rect& rect = get_bar_rect_screen(canvas); const Rect& rect = get_bar_rect_screen(canvas);
return (rect.get_left() <= x) && (x <= rect.get_right()) && (rect.get_top() <= y) && (y <= rect.get_bottom()); return rect.get_left() <= x && x <= rect.get_right() && rect.get_top() <= y && y <= rect.get_bottom();
} }
Rect GLCanvas3D::LayersEditing::get_bar_rect_screen(const GLCanvas3D& canvas) Rect GLCanvas3D::LayersEditing::get_bar_rect_screen(const GLCanvas3D& canvas)
@ -339,7 +321,7 @@ Rect GLCanvas3D::LayersEditing::get_bar_rect_screen(const GLCanvas3D& canvas)
float w = (float)cnv_size.get_width(); float w = (float)cnv_size.get_width();
float h = (float)cnv_size.get_height(); float h = (float)cnv_size.get_height();
return Rect(w - thickness_bar_width(canvas), 0.0f, w, h); return { w - thickness_bar_width(canvas), 0.0f, w, h };
} }
Rect GLCanvas3D::LayersEditing::get_bar_rect_viewport(const GLCanvas3D& canvas) Rect GLCanvas3D::LayersEditing::get_bar_rect_viewport(const GLCanvas3D& canvas)
@ -348,7 +330,7 @@ Rect GLCanvas3D::LayersEditing::get_bar_rect_viewport(const GLCanvas3D& canvas)
float half_w = 0.5f * (float)cnv_size.get_width(); float half_w = 0.5f * (float)cnv_size.get_width();
float half_h = 0.5f * (float)cnv_size.get_height(); float half_h = 0.5f * (float)cnv_size.get_height();
float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom();
return Rect((half_w - thickness_bar_width(canvas)) * inv_zoom, half_h * inv_zoom, half_w * inv_zoom, -half_h * inv_zoom); return { (half_w - thickness_bar_width(canvas)) * inv_zoom, half_h * inv_zoom, half_w * inv_zoom, -half_h * inv_zoom };
} }
bool GLCanvas3D::LayersEditing::is_initialized() const bool GLCanvas3D::LayersEditing::is_initialized() const
@ -565,7 +547,7 @@ void GLCanvas3D::LayersEditing::accept_changes(GLCanvas3D& canvas)
{ {
if (last_object_id >= 0) { if (last_object_id >= 0) {
if (m_layer_height_profile_modified) { if (m_layer_height_profile_modified) {
wxGetApp().plater()->take_snapshot(_(L("Variable layer height - Manual edit"))); wxGetApp().plater()->take_snapshot(_L("Variable layer height - Manual edit"));
const_cast<ModelObject*>(m_model_object)->layer_height_profile.set(m_layer_height_profile); const_cast<ModelObject*>(m_model_object)->layer_height_profile.set(m_layer_height_profile);
canvas.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); canvas.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS));
wxGetApp().obj_list()->update_info_items(last_object_id); wxGetApp().obj_list()->update_info_items(last_object_id);

View file

@ -154,53 +154,50 @@ class GLCanvas3D
static const float THICKNESS_BAR_WIDTH; static const float THICKNESS_BAR_WIDTH;
private: private:
bool m_enabled; bool m_enabled{ false };
unsigned int m_z_texture_id; unsigned int m_z_texture_id{ 0 };
// Not owned by LayersEditing. // Not owned by LayersEditing.
const DynamicPrintConfig *m_config; const DynamicPrintConfig *m_config{ nullptr };
// ModelObject for the currently selected object (Model::objects[last_object_id]). // ModelObject for the currently selected object (Model::objects[last_object_id]).
const ModelObject *m_model_object; const ModelObject *m_model_object{ nullptr };
// Maximum z of the currently selected object (Model::objects[last_object_id]). // Maximum z of the currently selected object (Model::objects[last_object_id]).
float m_object_max_z; float m_object_max_z{ 0.0f };
// Owned by LayersEditing. // Owned by LayersEditing.
SlicingParameters *m_slicing_parameters; SlicingParameters *m_slicing_parameters{ nullptr };
std::vector<double> m_layer_height_profile; std::vector<double> m_layer_height_profile;
bool m_layer_height_profile_modified; bool m_layer_height_profile_modified{ false };
mutable float m_adaptive_quality; mutable float m_adaptive_quality{ 0.5f };
mutable HeightProfileSmoothingParams m_smooth_params; mutable HeightProfileSmoothingParams m_smooth_params;
static float s_overelay_window_width; static float s_overlay_window_width;
class LayersTexture struct LayersTexture
{ {
public:
LayersTexture() : width(0), height(0), levels(0), cells(0), valid(false) {}
// Texture data // Texture data
std::vector<char> data; std::vector<char> data;
// Width of the texture, top level. // Width of the texture, top level.
size_t width; size_t width{ 0 };
// Height of the texture, top level. // Height of the texture, top level.
size_t height; size_t height{ 0 };
// For how many levels of detail is the data allocated? // For how many levels of detail is the data allocated?
size_t levels; size_t levels{ 0 };
// Number of texture cells allocated for the height texture. // Number of texture cells allocated for the height texture.
size_t cells; size_t cells{ 0 };
// Does it need to be refreshed? // Does it need to be refreshed?
bool valid; bool valid{ false };
}; };
LayersTexture m_layers_texture; LayersTexture m_layers_texture;
public: public:
EState state; EState state{ Unknown };
float band_width; float band_width{ 2.0f };
float strength; float strength{ 0.005f };
int last_object_id; int last_object_id{ -1 };
float last_z; float last_z{ 0.0f };
LayerHeightEditActionType last_action; LayerHeightEditActionType last_action{ LAYER_HEIGHT_EDIT_ACTION_INCREASE };
LayersEditing(); LayersEditing() = default;
~LayersEditing(); ~LayersEditing();
void init(); void init();
@ -226,7 +223,7 @@ class GLCanvas3D
static bool bar_rect_contains(const GLCanvas3D& canvas, float x, float y); static bool bar_rect_contains(const GLCanvas3D& canvas, float x, float y);
static Rect get_bar_rect_screen(const GLCanvas3D& canvas); static Rect get_bar_rect_screen(const GLCanvas3D& canvas);
static Rect get_bar_rect_viewport(const GLCanvas3D& canvas); static Rect get_bar_rect_viewport(const GLCanvas3D& canvas);
static float get_overlay_window_width() { return LayersEditing::s_overelay_window_width; } static float get_overlay_window_width() { return LayersEditing::s_overlay_window_width; }
float object_max_z() const { return m_object_max_z; } float object_max_z() const { return m_object_max_z; }