Removed obsolete class GLCanvas3D::WarningTexture
This commit is contained in:
parent
a6bd2d7664
commit
125fcd0623
3 changed files with 163 additions and 88 deletions
src
|
@ -116,6 +116,7 @@
|
||||||
#define ENABLE_SPLITTED_VERTEX_BUFFER (1 && ENABLE_2_3_1_ALPHA1)
|
#define ENABLE_SPLITTED_VERTEX_BUFFER (1 && ENABLE_2_3_1_ALPHA1)
|
||||||
#define ENABLE_RELOAD_FROM_DISK_FOR_3MF (1 && ENABLE_2_3_1_ALPHA1)
|
#define ENABLE_RELOAD_FROM_DISK_FOR_3MF (1 && ENABLE_2_3_1_ALPHA1)
|
||||||
#define ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS (1 && ENABLE_SPLITTED_VERTEX_BUFFER)
|
#define ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS (1 && ENABLE_SPLITTED_VERTEX_BUFFER)
|
||||||
|
#define ENABLE_WARNING_TEXTURE_REMOVAL (1 && ENABLE_2_3_1_ALPHA1)
|
||||||
|
|
||||||
|
|
||||||
#endif // _prusaslicer_technologies_h_
|
#endif // _prusaslicer_technologies_h_
|
||||||
|
|
|
@ -611,6 +611,7 @@ GLCanvas3D::Mouse::Mouse()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
const unsigned char GLCanvas3D::WarningTexture::Background_Color[3] = { 120, 120, 120 };//{ 9, 91, 134 };
|
const unsigned char GLCanvas3D::WarningTexture::Background_Color[3] = { 120, 120, 120 };//{ 9, 91, 134 };
|
||||||
const unsigned char GLCanvas3D::WarningTexture::Opacity = 255;
|
const unsigned char GLCanvas3D::WarningTexture::Opacity = 255;
|
||||||
|
|
||||||
|
@ -879,6 +880,7 @@ void GLCanvas3D::WarningTexture::msw_rescale(const GLCanvas3D& canvas)
|
||||||
|
|
||||||
generate(m_msg_text, canvas, true, m_is_colored_red);
|
generate(m_msg_text, canvas, true, m_is_colored_red);
|
||||||
}
|
}
|
||||||
|
#endif // !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
|
||||||
void GLCanvas3D::Labels::render(const std::vector<const ModelInstance*>& sorted_instances) const
|
void GLCanvas3D::Labels::render(const std::vector<const ModelInstance*>& sorted_instances) const
|
||||||
{
|
{
|
||||||
|
@ -1302,7 +1304,11 @@ void GLCanvas3D::reset_volumes()
|
||||||
m_volumes.clear();
|
m_volumes.clear();
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
|
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
_set_warning_notification(EWarning::ObjectOutside, false);
|
||||||
|
#else
|
||||||
_set_warning_texture(WarningTexture::ObjectOutside, false);
|
_set_warning_texture(WarningTexture::ObjectOutside, false);
|
||||||
|
#endif // ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
}
|
}
|
||||||
|
|
||||||
int GLCanvas3D::check_volumes_outside_state() const
|
int GLCanvas3D::check_volumes_outside_state() const
|
||||||
|
@ -1356,11 +1362,19 @@ void GLCanvas3D::toggle_model_objects_visibility(bool visible, const ModelObject
|
||||||
if (visible && !mo)
|
if (visible && !mo)
|
||||||
toggle_sla_auxiliaries_visibility(true, mo, instance_idx);
|
toggle_sla_auxiliaries_visibility(true, mo, instance_idx);
|
||||||
|
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
if (!mo && !visible && !m_model->objects.empty() && (m_model->objects.size() > 1 || m_model->objects.front()->instances.size() > 1))
|
||||||
|
_set_warning_notification(EWarning::SomethingNotShown, true);
|
||||||
|
|
||||||
|
if (!mo && visible)
|
||||||
|
_set_warning_notification(EWarning::SomethingNotShown, false);
|
||||||
|
#else
|
||||||
if (!mo && !visible && !m_model->objects.empty() && (m_model->objects.size() > 1 || m_model->objects.front()->instances.size() > 1))
|
if (!mo && !visible && !m_model->objects.empty() && (m_model->objects.size() > 1 || m_model->objects.front()->instances.size() > 1))
|
||||||
_set_warning_texture(WarningTexture::SomethingNotShown, true);
|
_set_warning_texture(WarningTexture::SomethingNotShown, true);
|
||||||
|
|
||||||
if (!mo && visible)
|
if (!mo && visible)
|
||||||
_set_warning_texture(WarningTexture::SomethingNotShown, false);
|
_set_warning_texture(WarningTexture::SomethingNotShown, false);
|
||||||
|
#endif // ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3D::update_instance_printable_state_for_object(const size_t obj_idx)
|
void GLCanvas3D::update_instance_printable_state_for_object(const size_t obj_idx)
|
||||||
|
@ -2236,18 +2250,31 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
|
||||||
|
|
||||||
const bool contained_min_one = m_volumes.check_outside_state(m_config, &state);
|
const bool contained_min_one = m_volumes.check_outside_state(m_config, &state);
|
||||||
|
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
_set_warning_notification(EWarning::ObjectClashed, state == ModelInstancePVS_Partly_Outside);
|
||||||
|
_set_warning_notification(EWarning::ObjectOutside, state == ModelInstancePVS_Fully_Outside);
|
||||||
|
if (printer_technology != ptSLA || state == ModelInstancePVS_Inside)
|
||||||
|
_set_warning_notification(EWarning::SlaSupportsOutside, false);
|
||||||
|
#else
|
||||||
_set_warning_texture(WarningTexture::ObjectClashed, state == ModelInstancePVS_Partly_Outside);
|
_set_warning_texture(WarningTexture::ObjectClashed, state == ModelInstancePVS_Partly_Outside);
|
||||||
_set_warning_texture(WarningTexture::ObjectOutside, state == ModelInstancePVS_Fully_Outside);
|
_set_warning_texture(WarningTexture::ObjectOutside, state == ModelInstancePVS_Fully_Outside);
|
||||||
if(printer_technology != ptSLA || state == ModelInstancePVS_Inside)
|
if(printer_technology != ptSLA || state == ModelInstancePVS_Inside)
|
||||||
_set_warning_texture(WarningTexture::SlaSupportsOutside, false);
|
_set_warning_texture(WarningTexture::SlaSupportsOutside, false);
|
||||||
|
#endif // ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
|
||||||
post_event(Event<bool>(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS,
|
post_event(Event<bool>(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS,
|
||||||
contained_min_one && !m_model->objects.empty() && state != ModelInstancePVS_Partly_Outside));
|
contained_min_one && !m_model->objects.empty() && state != ModelInstancePVS_Partly_Outside));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
_set_warning_notification(EWarning::ObjectOutside, false);
|
||||||
|
_set_warning_notification(EWarning::ObjectClashed, false);
|
||||||
|
_set_warning_notification(EWarning::SlaSupportsOutside, false);
|
||||||
|
#else
|
||||||
_set_warning_texture(WarningTexture::ObjectOutside, false);
|
_set_warning_texture(WarningTexture::ObjectOutside, false);
|
||||||
_set_warning_texture(WarningTexture::ObjectClashed, false);
|
_set_warning_texture(WarningTexture::ObjectClashed, false);
|
||||||
_set_warning_texture(WarningTexture::SlaSupportsOutside, false);
|
_set_warning_texture(WarningTexture::SlaSupportsOutside, false);
|
||||||
|
#endif // ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
post_event(Event<bool>(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, false));
|
post_event(Event<bool>(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2290,7 +2317,11 @@ void GLCanvas3D::load_gcode_preview(const GCodeProcessor::Result& gcode_result)
|
||||||
|
|
||||||
if (wxGetApp().is_editor()) {
|
if (wxGetApp().is_editor()) {
|
||||||
m_gcode_viewer.update_shells_color_by_extruder(m_config);
|
m_gcode_viewer.update_shells_color_by_extruder(m_config);
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
_set_warning_notification_if_needed(EWarning::ToolpathOutside);
|
||||||
|
#else
|
||||||
_show_warning_texture_if_needed(WarningTexture::ToolpathOutside);
|
_show_warning_texture_if_needed(WarningTexture::ToolpathOutside);
|
||||||
|
#endif // ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2319,7 +2350,11 @@ void GLCanvas3D::load_sla_preview()
|
||||||
this->reset_volumes();
|
this->reset_volumes();
|
||||||
_load_sla_shells();
|
_load_sla_shells();
|
||||||
_update_sla_shells_outside_state();
|
_update_sla_shells_outside_state();
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
_set_warning_notification_if_needed(EWarning::SlaSupportsOutside);
|
||||||
|
#else
|
||||||
_show_warning_texture_if_needed(WarningTexture::SlaSupportsOutside);
|
_show_warning_texture_if_needed(WarningTexture::SlaSupportsOutside);
|
||||||
|
#endif // ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2340,7 +2375,11 @@ void GLCanvas3D::load_preview(const std::vector<std::string>& str_tool_colors, c
|
||||||
_load_print_object_toolpaths(*object, str_tool_colors, color_print_values);
|
_load_print_object_toolpaths(*object, str_tool_colors, color_print_values);
|
||||||
|
|
||||||
_update_toolpath_volumes_outside_state();
|
_update_toolpath_volumes_outside_state();
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
_set_warning_notification_if_needed(EWarning::ToolpathOutside);
|
||||||
|
#else
|
||||||
_show_warning_texture_if_needed(WarningTexture::ToolpathOutside);
|
_show_warning_texture_if_needed(WarningTexture::ToolpathOutside);
|
||||||
|
#endif // ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3D::bind_event_handlers()
|
void GLCanvas3D::bind_event_handlers()
|
||||||
|
@ -3850,7 +3889,9 @@ void GLCanvas3D::set_cursor(ECursorType type)
|
||||||
|
|
||||||
void GLCanvas3D::msw_rescale()
|
void GLCanvas3D::msw_rescale()
|
||||||
{
|
{
|
||||||
|
#if !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
m_warning_texture.msw_rescale(*this);
|
m_warning_texture.msw_rescale(*this);
|
||||||
|
#endif // !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3D::update_tooltip_for_settings_item_in_main_toolbar()
|
void GLCanvas3D::update_tooltip_for_settings_item_in_main_toolbar()
|
||||||
|
@ -5190,7 +5231,9 @@ void GLCanvas3D::_render_overlays() const
|
||||||
_check_and_update_toolbar_icon_scale();
|
_check_and_update_toolbar_icon_scale();
|
||||||
|
|
||||||
_render_gizmos_overlay();
|
_render_gizmos_overlay();
|
||||||
|
#if !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
_render_warning_texture();
|
_render_warning_texture();
|
||||||
|
#endif // !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
|
||||||
// main toolbar and undoredo toolbar need to be both updated before rendering because both their sizes are needed
|
// main toolbar and undoredo toolbar need to be both updated before rendering because both their sizes are needed
|
||||||
// to correctly place them
|
// to correctly place them
|
||||||
|
@ -5211,7 +5254,7 @@ void GLCanvas3D::_render_overlays() const
|
||||||
_render_collapse_toolbar();
|
_render_collapse_toolbar();
|
||||||
_render_view_toolbar();
|
_render_view_toolbar();
|
||||||
|
|
||||||
if ((m_layers_editing.last_object_id >= 0) && (m_layers_editing.object_max_z() > 0.0f))
|
if (m_layers_editing.last_object_id >= 0 && m_layers_editing.object_max_z() > 0.0f)
|
||||||
m_layers_editing.render_overlay(*this);
|
m_layers_editing.render_overlay(*this);
|
||||||
|
|
||||||
const ConfigOptionBool* opt = dynamic_cast<const ConfigOptionBool*>(m_config->option("complete_objects"));
|
const ConfigOptionBool* opt = dynamic_cast<const ConfigOptionBool*>(m_config->option("complete_objects"));
|
||||||
|
@ -5228,10 +5271,12 @@ void GLCanvas3D::_render_overlays() const
|
||||||
glsafe(::glPopMatrix());
|
glsafe(::glPopMatrix());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
void GLCanvas3D::_render_warning_texture() const
|
void GLCanvas3D::_render_warning_texture() const
|
||||||
{
|
{
|
||||||
m_warning_texture.render(*this);
|
m_warning_texture.render(*this);
|
||||||
}
|
}
|
||||||
|
#endif // !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
|
||||||
void GLCanvas3D::_render_volumes_for_picking() const
|
void GLCanvas3D::_render_volumes_for_picking() const
|
||||||
{
|
{
|
||||||
|
@ -5401,8 +5446,7 @@ void GLCanvas3D::_render_sla_slices() const
|
||||||
|
|
||||||
double clip_min_z = -m_clipping_planes[0].get_data()[3];
|
double clip_min_z = -m_clipping_planes[0].get_data()[3];
|
||||||
double clip_max_z = m_clipping_planes[1].get_data()[3];
|
double clip_max_z = m_clipping_planes[1].get_data()[3];
|
||||||
for (unsigned int i = 0; i < (unsigned int)print_objects.size(); ++i)
|
for (unsigned int i = 0; i < (unsigned int)print_objects.size(); ++i) {
|
||||||
{
|
|
||||||
const SLAPrintObject* obj = print_objects[i];
|
const SLAPrintObject* obj = print_objects[i];
|
||||||
|
|
||||||
if (!obj->is_step_done(slaposSliceSupports))
|
if (!obj->is_step_done(slaposSliceSupports))
|
||||||
|
@ -5473,10 +5517,8 @@ void GLCanvas3D::_render_sla_slices() const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bottom_obj_triangles.empty() || !top_obj_triangles.empty() || !bottom_sup_triangles.empty() || !top_sup_triangles.empty())
|
if (!bottom_obj_triangles.empty() || !top_obj_triangles.empty() || !bottom_sup_triangles.empty() || !top_sup_triangles.empty()) {
|
||||||
{
|
for (const SLAPrintObject::Instance& inst : obj->instances()) {
|
||||||
for (const SLAPrintObject::Instance& inst : obj->instances())
|
|
||||||
{
|
|
||||||
glsafe(::glPushMatrix());
|
glsafe(::glPushMatrix());
|
||||||
glsafe(::glTranslated(unscale<double>(inst.shift.x()), unscale<double>(inst.shift.y()), 0));
|
glsafe(::glTranslated(unscale<double>(inst.shift.x()), unscale<double>(inst.shift.y()), 0));
|
||||||
glsafe(::glRotatef(Geometry::rad2deg(inst.rotation), 0.0, 0.0, 1.0));
|
glsafe(::glRotatef(Geometry::rad2deg(inst.rotation), 0.0, 0.0, 1.0));
|
||||||
|
@ -5516,8 +5558,7 @@ void GLCanvas3D::_render_selection_sidebar_hints() const
|
||||||
|
|
||||||
void GLCanvas3D::_update_volumes_hover_state() const
|
void GLCanvas3D::_update_volumes_hover_state() const
|
||||||
{
|
{
|
||||||
for (GLVolume* v : m_volumes.volumes)
|
for (GLVolume* v : m_volumes.volumes) {
|
||||||
{
|
|
||||||
v->hover = GLVolume::HS_None;
|
v->hover = GLVolume::HS_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5528,8 +5569,7 @@ void GLCanvas3D::_update_volumes_hover_state() const
|
||||||
bool shift_pressed = wxGetKeyState(WXK_SHIFT); // select by rectangle
|
bool shift_pressed = wxGetKeyState(WXK_SHIFT); // select by rectangle
|
||||||
bool alt_pressed = wxGetKeyState(WXK_ALT); // deselect by rectangle
|
bool alt_pressed = wxGetKeyState(WXK_ALT); // deselect by rectangle
|
||||||
|
|
||||||
if (alt_pressed && (shift_pressed || ctrl_pressed))
|
if (alt_pressed && (shift_pressed || ctrl_pressed)) {
|
||||||
{
|
|
||||||
// illegal combinations of keys
|
// illegal combinations of keys
|
||||||
m_hover_volume_idxs.clear();
|
m_hover_volume_idxs.clear();
|
||||||
return;
|
return;
|
||||||
|
@ -5538,33 +5578,28 @@ void GLCanvas3D::_update_volumes_hover_state() const
|
||||||
bool selection_modifiers_only = m_selection.is_empty() || m_selection.is_any_modifier();
|
bool selection_modifiers_only = m_selection.is_empty() || m_selection.is_any_modifier();
|
||||||
|
|
||||||
bool hover_modifiers_only = true;
|
bool hover_modifiers_only = true;
|
||||||
for (int i : m_hover_volume_idxs)
|
for (int i : m_hover_volume_idxs) {
|
||||||
{
|
if (!m_volumes.volumes[i]->is_modifier) {
|
||||||
if (!m_volumes.volumes[i]->is_modifier)
|
|
||||||
{
|
|
||||||
hover_modifiers_only = false;
|
hover_modifiers_only = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<std::pair<int, int>> hover_instances;
|
std::set<std::pair<int, int>> hover_instances;
|
||||||
for (int i : m_hover_volume_idxs)
|
for (int i : m_hover_volume_idxs) {
|
||||||
{
|
|
||||||
const GLVolume& v = *m_volumes.volumes[i];
|
const GLVolume& v = *m_volumes.volumes[i];
|
||||||
hover_instances.insert(std::make_pair(v.object_idx(), v.instance_idx()));
|
hover_instances.insert(std::make_pair(v.object_idx(), v.instance_idx()));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hover_from_single_instance = hover_instances.size() == 1;
|
bool hover_from_single_instance = hover_instances.size() == 1;
|
||||||
|
|
||||||
if (hover_modifiers_only && !hover_from_single_instance)
|
if (hover_modifiers_only && !hover_from_single_instance) {
|
||||||
{
|
|
||||||
// do not allow to select volumes from different instances
|
// do not allow to select volumes from different instances
|
||||||
m_hover_volume_idxs.clear();
|
m_hover_volume_idxs.clear();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i : m_hover_volume_idxs)
|
for (int i : m_hover_volume_idxs) {
|
||||||
{
|
|
||||||
GLVolume& volume = *m_volumes.volumes[i];
|
GLVolume& volume = *m_volumes.volumes[i];
|
||||||
if (volume.hover != GLVolume::HS_None)
|
if (volume.hover != GLVolume::HS_None)
|
||||||
continue;
|
continue;
|
||||||
|
@ -5573,8 +5608,7 @@ void GLCanvas3D::_update_volumes_hover_state() const
|
||||||
// (volume->is_modifier && !selection_modifiers_only && !is_ctrl_pressed) -> allows hovering on selected modifiers belonging to selection of type Instance
|
// (volume->is_modifier && !selection_modifiers_only && !is_ctrl_pressed) -> allows hovering on selected modifiers belonging to selection of type Instance
|
||||||
bool select = (!volume.selected || (volume.is_modifier && !selection_modifiers_only && !ctrl_pressed)) && !alt_pressed;
|
bool select = (!volume.selected || (volume.is_modifier && !selection_modifiers_only && !ctrl_pressed)) && !alt_pressed;
|
||||||
|
|
||||||
if (select || deselect)
|
if (select || deselect) {
|
||||||
{
|
|
||||||
bool as_volume =
|
bool as_volume =
|
||||||
volume.is_modifier && hover_from_single_instance && !ctrl_pressed &&
|
volume.is_modifier && hover_from_single_instance && !ctrl_pressed &&
|
||||||
(
|
(
|
||||||
|
@ -5582,22 +5616,18 @@ void GLCanvas3D::_update_volumes_hover_state() const
|
||||||
(deselect && !m_selection.is_single_full_instance() && (volume.object_idx() == m_selection.get_object_idx()) && (volume.instance_idx() == m_selection.get_instance_idx()))
|
(deselect && !m_selection.is_single_full_instance() && (volume.object_idx() == m_selection.get_object_idx()) && (volume.instance_idx() == m_selection.get_instance_idx()))
|
||||||
);
|
);
|
||||||
|
|
||||||
if (as_volume)
|
if (as_volume) {
|
||||||
{
|
|
||||||
if (deselect)
|
if (deselect)
|
||||||
volume.hover = GLVolume::HS_Deselect;
|
volume.hover = GLVolume::HS_Deselect;
|
||||||
else
|
else
|
||||||
volume.hover = GLVolume::HS_Select;
|
volume.hover = GLVolume::HS_Select;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
int object_idx = volume.object_idx();
|
int object_idx = volume.object_idx();
|
||||||
int instance_idx = volume.instance_idx();
|
int instance_idx = volume.instance_idx();
|
||||||
|
|
||||||
for (GLVolume* v : m_volumes.volumes)
|
for (GLVolume* v : m_volumes.volumes) {
|
||||||
{
|
if (v->object_idx() == object_idx && v->instance_idx() == instance_idx) {
|
||||||
if ((v->object_idx() == object_idx) && (v->instance_idx() == instance_idx))
|
|
||||||
{
|
|
||||||
if (deselect)
|
if (deselect)
|
||||||
v->hover = GLVolume::HS_Deselect;
|
v->hover = GLVolume::HS_Deselect;
|
||||||
else
|
else
|
||||||
|
@ -5616,8 +5646,7 @@ void GLCanvas3D::_perform_layer_editing_action(wxMouseEvent* evt)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// A volume is selected. Test, whether hovering over a layer thickness bar.
|
// A volume is selected. Test, whether hovering over a layer thickness bar.
|
||||||
if (evt != nullptr)
|
if (evt != nullptr) {
|
||||||
{
|
|
||||||
const Rect& rect = LayersEditing::get_bar_rect_screen(*this);
|
const Rect& rect = LayersEditing::get_bar_rect_screen(*this);
|
||||||
float b = rect.get_bottom();
|
float b = rect.get_bottom();
|
||||||
m_layers_editing.last_z = m_layers_editing.object_max_z() * (b - evt->GetY() - 1.0f) / (b - rect.get_top());
|
m_layers_editing.last_z = m_layers_editing.object_max_z() * (b - evt->GetY() - 1.0f) / (b - rect.get_top());
|
||||||
|
@ -5686,8 +5715,7 @@ void GLCanvas3D::_load_print_toolpaths()
|
||||||
|
|
||||||
// number of skirt layers
|
// number of skirt layers
|
||||||
size_t total_layer_count = 0;
|
size_t total_layer_count = 0;
|
||||||
for (const PrintObject* print_object : print->objects())
|
for (const PrintObject* print_object : print->objects()) {
|
||||||
{
|
|
||||||
total_layer_count = std::max(total_layer_count, print_object->total_layer_count());
|
total_layer_count = std::max(total_layer_count, print_object->total_layer_count());
|
||||||
}
|
}
|
||||||
size_t skirt_height = print->has_infinite_skirt() ? total_layer_count : std::min<size_t>(print->config().skirt_height.value, total_layer_count);
|
size_t skirt_height = print->has_infinite_skirt() ? total_layer_count : std::min<size_t>(print->config().skirt_height.value, total_layer_count);
|
||||||
|
@ -5768,8 +5796,7 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c
|
||||||
auto it = std::find_if(color_print_values->begin(), color_print_values->end(),
|
auto it = std::find_if(color_print_values->begin(), color_print_values->end(),
|
||||||
[print_z](const CustomGCode::Item& code)
|
[print_z](const CustomGCode::Item& code)
|
||||||
{ return fabs(code.print_z - print_z) < EPSILON; });
|
{ return fabs(code.print_z - print_z) < EPSILON; });
|
||||||
if (it != color_print_values->end())
|
if (it != color_print_values->end()) {
|
||||||
{
|
|
||||||
CustomGCode::Type type = it->type;
|
CustomGCode::Type type = it->type;
|
||||||
// pause print or custom Gcode
|
// pause print or custom Gcode
|
||||||
if (type == CustomGCode::PausePrint ||
|
if (type == CustomGCode::PausePrint ||
|
||||||
|
@ -5789,8 +5816,7 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c
|
||||||
|
|
||||||
const CustomGCode::Item value{print_z + EPSILON, CustomGCode::Custom, 0, ""};
|
const CustomGCode::Item value{print_z + EPSILON, CustomGCode::Custom, 0, ""};
|
||||||
it = std::lower_bound(color_print_values->begin(), color_print_values->end(), value);
|
it = std::lower_bound(color_print_values->begin(), color_print_values->end(), value);
|
||||||
while (it != color_print_values->begin())
|
while (it != color_print_values->begin()) {
|
||||||
{
|
|
||||||
--it;
|
--it;
|
||||||
// change color for current extruder
|
// change color for current extruder
|
||||||
if (it->type == CustomGCode::ColorChange) {
|
if (it->type == CustomGCode::ColorChange) {
|
||||||
|
@ -6252,6 +6278,24 @@ void GLCanvas3D::_update_sla_shells_outside_state()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
void GLCanvas3D::_set_warning_notification_if_needed(EWarning warning)
|
||||||
|
{
|
||||||
|
_set_current();
|
||||||
|
bool show = false;
|
||||||
|
if (!m_volumes.empty())
|
||||||
|
show = _is_any_volume_outside();
|
||||||
|
else {
|
||||||
|
if (wxGetApp().is_editor()) {
|
||||||
|
BoundingBoxf3 test_volume = (m_config != nullptr) ? print_volume(*m_config) : BoundingBoxf3();
|
||||||
|
const BoundingBoxf3& paths_volume = m_gcode_viewer.get_paths_bounding_box();
|
||||||
|
if (test_volume.radius() > 0.0 && paths_volume.radius() > 0.0)
|
||||||
|
show = !test_volume.contains(paths_volume);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_set_warning_notification(warning, show);
|
||||||
|
}
|
||||||
|
#else
|
||||||
void GLCanvas3D::_show_warning_texture_if_needed(WarningTexture::Warning warning)
|
void GLCanvas3D::_show_warning_texture_if_needed(WarningTexture::Warning warning)
|
||||||
{
|
{
|
||||||
_set_current();
|
_set_current();
|
||||||
|
@ -6268,23 +6312,21 @@ void GLCanvas3D::_show_warning_texture_if_needed(WarningTexture::Warning warning
|
||||||
}
|
}
|
||||||
_set_warning_texture(warning, show);
|
_set_warning_texture(warning, show);
|
||||||
}
|
}
|
||||||
|
#endif // ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
|
||||||
std::vector<float> GLCanvas3D::_parse_colors(const std::vector<std::string>& colors)
|
std::vector<float> GLCanvas3D::_parse_colors(const std::vector<std::string>& colors)
|
||||||
{
|
{
|
||||||
static const float INV_255 = 1.0f / 255.0f;
|
static const float INV_255 = 1.0f / 255.0f;
|
||||||
|
|
||||||
std::vector<float> output(colors.size() * 4, 1.0f);
|
std::vector<float> output(colors.size() * 4, 1.0f);
|
||||||
for (size_t i = 0; i < colors.size(); ++i)
|
for (size_t i = 0; i < colors.size(); ++i) {
|
||||||
{
|
|
||||||
const std::string& color = colors[i];
|
const std::string& color = colors[i];
|
||||||
const char* c = color.data() + 1;
|
const char* c = color.data() + 1;
|
||||||
if ((color.size() == 7) && (color.front() == '#'))
|
if (color.size() == 7 && color.front() == '#') {
|
||||||
{
|
for (size_t j = 0; j < 3; ++j) {
|
||||||
for (size_t j = 0; j < 3; ++j)
|
|
||||||
{
|
|
||||||
int digit1 = hex_digit_to_int(*c++);
|
int digit1 = hex_digit_to_int(*c++);
|
||||||
int digit2 = hex_digit_to_int(*c++);
|
int digit2 = hex_digit_to_int(*c++);
|
||||||
if ((digit1 == -1) || (digit2 == -1))
|
if (digit1 == -1 || digit2 == -1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
output[i * 4 + j] = float(digit1 * 16 + digit2) * INV_255;
|
output[i * 4 + j] = float(digit1 * 16 + digit2) * INV_255;
|
||||||
|
@ -6294,10 +6336,42 @@ std::vector<float> GLCanvas3D::_parse_colors(const std::vector<std::string>& col
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
void GLCanvas3D::_set_warning_notification(EWarning warning, bool state)
|
||||||
|
{
|
||||||
|
std::string text;
|
||||||
|
bool error = false;
|
||||||
|
switch (warning) {
|
||||||
|
case EWarning::ObjectOutside: text = _u8L("An object outside the print area was detected."); break;
|
||||||
|
case EWarning::ToolpathOutside: text = _u8L("A toolpath outside the print area was detected."); error = true; break;
|
||||||
|
case EWarning::SlaSupportsOutside: text = _u8L("SLA supports outside the print area were detected."); error = true; break;
|
||||||
|
case EWarning::SomethingNotShown: text = _u8L("Some objects are not visible."); break;
|
||||||
|
case EWarning::ObjectClashed:
|
||||||
|
text = _u8L("An object outside the print area was detected.\n"
|
||||||
|
"Resolve the current problem to continue slicing.");
|
||||||
|
error = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
auto& notification_manager = *wxGetApp().plater()->get_notification_manager();
|
||||||
|
if (state) {
|
||||||
|
if (error)
|
||||||
|
notification_manager.push_plater_error_notification(text);
|
||||||
|
else
|
||||||
|
notification_manager.push_plater_warning_notification(text);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (error)
|
||||||
|
notification_manager.close_plater_error_notification(text);
|
||||||
|
else
|
||||||
|
notification_manager.close_plater_warning_notification(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
void GLCanvas3D::_set_warning_texture(WarningTexture::Warning warning, bool state)
|
void GLCanvas3D::_set_warning_texture(WarningTexture::Warning warning, bool state)
|
||||||
{
|
{
|
||||||
m_warning_texture.activate(warning, state, *this);
|
m_warning_texture.activate(warning, state, *this);
|
||||||
}
|
}
|
||||||
|
#endif // !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
|
||||||
bool GLCanvas3D::_is_any_volume_outside() const
|
bool GLCanvas3D::_is_any_volume_outside() const
|
||||||
{
|
{
|
||||||
|
@ -6313,8 +6387,7 @@ void GLCanvas3D::_update_selection_from_hover()
|
||||||
{
|
{
|
||||||
bool ctrl_pressed = wxGetKeyState(WXK_CONTROL);
|
bool ctrl_pressed = wxGetKeyState(WXK_CONTROL);
|
||||||
|
|
||||||
if (m_hover_volume_idxs.empty())
|
if (m_hover_volume_idxs.empty()) {
|
||||||
{
|
|
||||||
if (!ctrl_pressed && (m_rectangle_selection.get_state() == GLSelectionRectangle::Select))
|
if (!ctrl_pressed && (m_rectangle_selection.get_state() == GLSelectionRectangle::Select))
|
||||||
m_selection.remove_all();
|
m_selection.remove_all();
|
||||||
|
|
||||||
|
@ -6324,50 +6397,40 @@ void GLCanvas3D::_update_selection_from_hover()
|
||||||
GLSelectionRectangle::EState state = m_rectangle_selection.get_state();
|
GLSelectionRectangle::EState state = m_rectangle_selection.get_state();
|
||||||
|
|
||||||
bool hover_modifiers_only = true;
|
bool hover_modifiers_only = true;
|
||||||
for (int i : m_hover_volume_idxs)
|
for (int i : m_hover_volume_idxs) {
|
||||||
{
|
if (!m_volumes.volumes[i]->is_modifier) {
|
||||||
if (!m_volumes.volumes[i]->is_modifier)
|
|
||||||
{
|
|
||||||
hover_modifiers_only = false;
|
hover_modifiers_only = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool selection_changed = false;
|
bool selection_changed = false;
|
||||||
if (state == GLSelectionRectangle::Select)
|
if (state == GLSelectionRectangle::Select) {
|
||||||
{
|
|
||||||
bool contains_all = true;
|
bool contains_all = true;
|
||||||
for (int i : m_hover_volume_idxs)
|
for (int i : m_hover_volume_idxs) {
|
||||||
{
|
if (!m_selection.contains_volume((unsigned int)i)) {
|
||||||
if (!m_selection.contains_volume((unsigned int)i))
|
|
||||||
{
|
|
||||||
contains_all = false;
|
contains_all = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// the selection is going to be modified (Add)
|
// the selection is going to be modified (Add)
|
||||||
if (!contains_all)
|
if (!contains_all) {
|
||||||
{
|
|
||||||
wxGetApp().plater()->take_snapshot(_(L("Selection-Add from rectangle")));
|
wxGetApp().plater()->take_snapshot(_(L("Selection-Add from rectangle")));
|
||||||
selection_changed = true;
|
selection_changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
bool contains_any = false;
|
bool contains_any = false;
|
||||||
for (int i : m_hover_volume_idxs)
|
for (int i : m_hover_volume_idxs) {
|
||||||
{
|
if (m_selection.contains_volume((unsigned int)i)) {
|
||||||
if (m_selection.contains_volume((unsigned int)i))
|
|
||||||
{
|
|
||||||
contains_any = true;
|
contains_any = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// the selection is going to be modified (Remove)
|
// the selection is going to be modified (Remove)
|
||||||
if (contains_any)
|
if (contains_any) {
|
||||||
{
|
|
||||||
wxGetApp().plater()->take_snapshot(_(L("Selection-Remove from rectangle")));
|
wxGetApp().plater()->take_snapshot(_(L("Selection-Remove from rectangle")));
|
||||||
selection_changed = true;
|
selection_changed = true;
|
||||||
}
|
}
|
||||||
|
@ -6381,12 +6444,9 @@ void GLCanvas3D::_update_selection_from_hover()
|
||||||
if ((state == GLSelectionRectangle::Select) && !ctrl_pressed)
|
if ((state == GLSelectionRectangle::Select) && !ctrl_pressed)
|
||||||
m_selection.clear();
|
m_selection.clear();
|
||||||
|
|
||||||
for (int i : m_hover_volume_idxs)
|
for (int i : m_hover_volume_idxs) {
|
||||||
{
|
if (state == GLSelectionRectangle::Select) {
|
||||||
if (state == GLSelectionRectangle::Select)
|
if (hover_modifiers_only) {
|
||||||
{
|
|
||||||
if (hover_modifiers_only)
|
|
||||||
{
|
|
||||||
const GLVolume& v = *m_volumes.volumes[i];
|
const GLVolume& v = *m_volumes.volumes[i];
|
||||||
m_selection.add_volume(v.object_idx(), v.volume_idx(), v.instance_idx(), false);
|
m_selection.add_volume(v.object_idx(), v.volume_idx(), v.instance_idx(), false);
|
||||||
}
|
}
|
||||||
|
@ -6409,13 +6469,11 @@ void GLCanvas3D::_update_selection_from_hover()
|
||||||
|
|
||||||
bool GLCanvas3D::_deactivate_undo_redo_toolbar_items()
|
bool GLCanvas3D::_deactivate_undo_redo_toolbar_items()
|
||||||
{
|
{
|
||||||
if (m_undoredo_toolbar.is_item_pressed("undo"))
|
if (m_undoredo_toolbar.is_item_pressed("undo")) {
|
||||||
{
|
|
||||||
m_undoredo_toolbar.force_right_action(m_undoredo_toolbar.get_item_id("undo"), *this);
|
m_undoredo_toolbar.force_right_action(m_undoredo_toolbar.get_item_id("undo"), *this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (m_undoredo_toolbar.is_item_pressed("redo"))
|
else if (m_undoredo_toolbar.is_item_pressed("redo")) {
|
||||||
{
|
|
||||||
m_undoredo_toolbar.force_right_action(m_undoredo_toolbar.get_item_id("redo"), *this);
|
m_undoredo_toolbar.force_right_action(m_undoredo_toolbar.get_item_id("redo"), *this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -6440,8 +6498,7 @@ bool GLCanvas3D::_deactivate_arrange_menu()
|
||||||
|
|
||||||
bool GLCanvas3D::_deactivate_search_toolbar_item()
|
bool GLCanvas3D::_deactivate_search_toolbar_item()
|
||||||
{
|
{
|
||||||
if (is_search_pressed())
|
if (is_search_pressed()) {
|
||||||
{
|
|
||||||
m_main_toolbar.force_left_action(m_main_toolbar.get_item_id("search"), *this);
|
m_main_toolbar.force_left_action(m_main_toolbar.get_item_id("search"), *this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -6451,8 +6508,7 @@ bool GLCanvas3D::_deactivate_search_toolbar_item()
|
||||||
|
|
||||||
bool GLCanvas3D::_activate_search_toolbar_item()
|
bool GLCanvas3D::_activate_search_toolbar_item()
|
||||||
{
|
{
|
||||||
if (!m_main_toolbar.is_item_pressed("search"))
|
if (!m_main_toolbar.is_item_pressed("search")) {
|
||||||
{
|
|
||||||
m_main_toolbar.force_left_action(m_main_toolbar.get_item_id("search"), *this);
|
m_main_toolbar.force_left_action(m_main_toolbar.get_item_id("search"), *this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -6463,8 +6519,7 @@ bool GLCanvas3D::_activate_search_toolbar_item()
|
||||||
bool GLCanvas3D::_deactivate_collapse_toolbar_items()
|
bool GLCanvas3D::_deactivate_collapse_toolbar_items()
|
||||||
{
|
{
|
||||||
GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar();
|
GLToolbar& collapse_toolbar = wxGetApp().plater()->get_collapse_toolbar();
|
||||||
if (collapse_toolbar.is_item_pressed("print"))
|
if (collapse_toolbar.is_item_pressed("print")) {
|
||||||
{
|
|
||||||
collapse_toolbar.force_left_action(collapse_toolbar.get_item_id("print"), *this);
|
collapse_toolbar.force_left_action(collapse_toolbar.get_item_id("print"), *this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -302,6 +302,15 @@ class GLCanvas3D
|
||||||
bool matches(double z) const { return this->z == z; }
|
bool matches(double z) const { return this->z == z; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
enum class EWarning {
|
||||||
|
ObjectOutside,
|
||||||
|
ToolpathOutside,
|
||||||
|
SlaSupportsOutside,
|
||||||
|
SomethingNotShown,
|
||||||
|
ObjectClashed
|
||||||
|
};
|
||||||
|
#else
|
||||||
class WarningTexture : public GUI::GLTexture
|
class WarningTexture : public GUI::GLTexture
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -340,6 +349,7 @@ class GLCanvas3D
|
||||||
// Generates the texture with given text.
|
// Generates the texture with given text.
|
||||||
bool generate(const std::string& msg, const GLCanvas3D& canvas, bool compress, bool red_colored = false);
|
bool generate(const std::string& msg, const GLCanvas3D& canvas, bool compress, bool red_colored = false);
|
||||||
};
|
};
|
||||||
|
#endif // ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
|
||||||
#if ENABLE_RENDER_STATISTICS
|
#if ENABLE_RENDER_STATISTICS
|
||||||
class RenderStats
|
class RenderStats
|
||||||
|
@ -437,7 +447,9 @@ private:
|
||||||
std::unique_ptr<RetinaHelper> m_retina_helper;
|
std::unique_ptr<RetinaHelper> m_retina_helper;
|
||||||
#endif
|
#endif
|
||||||
bool m_in_render;
|
bool m_in_render;
|
||||||
|
#if !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
WarningTexture m_warning_texture;
|
WarningTexture m_warning_texture;
|
||||||
|
#endif // !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
wxTimer m_timer;
|
wxTimer m_timer;
|
||||||
LayersEditing m_layers_editing;
|
LayersEditing m_layers_editing;
|
||||||
Mouse m_mouse;
|
Mouse m_mouse;
|
||||||
|
@ -578,10 +590,8 @@ public:
|
||||||
|
|
||||||
void bed_shape_changed();
|
void bed_shape_changed();
|
||||||
|
|
||||||
void set_clipping_plane(unsigned int id, const ClippingPlane& plane)
|
void set_clipping_plane(unsigned int id, const ClippingPlane& plane) {
|
||||||
{
|
if (id < 2) {
|
||||||
if (id < 2)
|
|
||||||
{
|
|
||||||
m_clipping_planes[id] = plane;
|
m_clipping_planes[id] = plane;
|
||||||
m_sla_caps[id].reset();
|
m_sla_caps[id].reset();
|
||||||
}
|
}
|
||||||
|
@ -812,7 +822,9 @@ private:
|
||||||
#endif // ENABLE_RENDER_SELECTION_CENTER
|
#endif // ENABLE_RENDER_SELECTION_CENTER
|
||||||
void _check_and_update_toolbar_icon_scale() const;
|
void _check_and_update_toolbar_icon_scale() const;
|
||||||
void _render_overlays() const;
|
void _render_overlays() const;
|
||||||
|
#if !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
void _render_warning_texture() const;
|
void _render_warning_texture() const;
|
||||||
|
#endif // !ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
void _render_volumes_for_picking() const;
|
void _render_volumes_for_picking() const;
|
||||||
void _render_current_gizmo() const;
|
void _render_current_gizmo() const;
|
||||||
void _render_gizmos_overlay() const;
|
void _render_gizmos_overlay() const;
|
||||||
|
@ -865,10 +877,17 @@ private:
|
||||||
void _load_sla_shells();
|
void _load_sla_shells();
|
||||||
void _update_toolpath_volumes_outside_state();
|
void _update_toolpath_volumes_outside_state();
|
||||||
void _update_sla_shells_outside_state();
|
void _update_sla_shells_outside_state();
|
||||||
|
#if ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
void _set_warning_notification_if_needed(EWarning warning);
|
||||||
|
|
||||||
|
// generates a warning notification containing the given message
|
||||||
|
void _set_warning_notification(EWarning warning, bool state);
|
||||||
|
#else
|
||||||
void _show_warning_texture_if_needed(WarningTexture::Warning warning);
|
void _show_warning_texture_if_needed(WarningTexture::Warning warning);
|
||||||
|
|
||||||
// generates a warning texture containing the given message
|
// generates a warning texture containing the given message
|
||||||
void _set_warning_texture(WarningTexture::Warning warning, bool state);
|
void _set_warning_texture(WarningTexture::Warning warning, bool state);
|
||||||
|
#endif // ENABLE_WARNING_TEXTURE_REMOVAL
|
||||||
|
|
||||||
bool _is_any_volume_outside() const;
|
bool _is_any_volume_outside() const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue