mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-13 09:47:58 -06:00
Small refactoring in GLCanvas3D::LayersEditing
This commit is contained in:
parent
b600540411
commit
a83cd647da
2 changed files with 31 additions and 52 deletions
|
@ -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);
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue