mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-02 05:11:00 +00:00
Hide Infill in the Shell Drag Mode Only Where the Profile Covers It
A profile with no top or bottom shell layers, or no walls, leaves the infill on the surface, so hiding it changed the picture. The viewer now reads the print's default region settings when it loads a print and leaves the infill in place for such a print; per-object overrides are not consulted.
This commit is contained in:
@@ -37,7 +37,9 @@ are the faces the range cuts open, and the top is what the user is looking at.
|
||||
print looks as it does at rest. The roles come from
|
||||
the slicer, so the classification is exact wherever the slicer's is; what it cannot express is
|
||||
the inside of the prime tower and of a support, which share one role with their outside and are
|
||||
kept whole. A profile with no top or bottom shell layers exposes infill, which this mode hides.
|
||||
kept whole. A profile with no top or bottom shell layers, or no walls, leaves the infill on the
|
||||
surface, so `GCodeViewer` turns the hiding off for such a print when it loads it, from the
|
||||
print's default region settings; per-object overrides are not consulted.
|
||||
|
||||
## The solid model
|
||||
|
||||
|
||||
@@ -121,6 +121,10 @@ public:
|
||||
//
|
||||
EReducedDetailMode get_reduced_detail_mode() const;
|
||||
void set_reduced_detail_mode(EReducedDetailMode mode);
|
||||
// Whether the shell mode hides the infill roles; off for a profile that leaves them on the
|
||||
// surface, with no top or bottom shell or no walls.
|
||||
bool get_reduced_detail_hide_infill() const;
|
||||
void set_reduced_detail_hide_infill(bool value);
|
||||
void set_reduced_detail(bool value);
|
||||
bool is_reduced_detail() const;
|
||||
float get_dim_previous_layers_brightness() const;
|
||||
|
||||
@@ -27,6 +27,8 @@ struct Settings
|
||||
bool spiral_vase_mode{ false };
|
||||
// what the reduced set holds and whether it is drawn. Ignored on the OpenGL ES path.
|
||||
EReducedDetailMode reduced_detail_mode{ EReducedDetailMode::Off };
|
||||
// whether the shell mode may hide the infill roles: false when the profile leaves them on the surface
|
||||
bool reduced_detail_hide_infill{ true };
|
||||
bool reduced_detail{ false };
|
||||
//
|
||||
// Required update flags
|
||||
|
||||
@@ -112,6 +112,16 @@ void Viewer::set_reduced_detail_mode(EReducedDetailMode mode)
|
||||
m_impl->set_reduced_detail_mode(mode);
|
||||
}
|
||||
|
||||
bool Viewer::get_reduced_detail_hide_infill() const
|
||||
{
|
||||
return m_impl->get_reduced_detail_hide_infill();
|
||||
}
|
||||
|
||||
void Viewer::set_reduced_detail_hide_infill(bool value)
|
||||
{
|
||||
m_impl->set_reduced_detail_hide_infill(value);
|
||||
}
|
||||
|
||||
void Viewer::set_dim_previous_layers(bool value)
|
||||
{
|
||||
m_impl->set_dim_previous_layers(value);
|
||||
|
||||
@@ -1219,6 +1219,7 @@ void ViewerImpl::update_enabled_entities()
|
||||
// surfaces the range cuts open
|
||||
const EReducedDetailMode reduced_mode = m_settings.reduced_detail_mode;
|
||||
const bool build_reduced = reduced_mode != EReducedDetailMode::Off;
|
||||
const bool hide_infill = m_settings.reduced_detail_hide_infill;
|
||||
std::vector<uint32_t> enabled_segments_reduced;
|
||||
std::vector<uint32_t> enabled_options_reduced;
|
||||
const Interval& layers_range = m_layers.get_view_range();
|
||||
@@ -1279,7 +1280,7 @@ void ViewerImpl::update_enabled_entities()
|
||||
else if (reduced_mode == EReducedDetailMode::ShellOnly) {
|
||||
if (v.is_option())
|
||||
enabled_options_reduced.push_back(static_cast<uint32_t>(i));
|
||||
else if (!v.is_extrusion() || !is_hidden_in_shell(v.role))
|
||||
else if (!v.is_extrusion() || !hide_infill || !is_hidden_in_shell(v.role))
|
||||
enabled_segments_reduced.push_back(static_cast<uint32_t>(i));
|
||||
}
|
||||
}
|
||||
@@ -1536,7 +1537,7 @@ void ViewerImpl::toggle_top_layer_only_view_range()
|
||||
update_colors_texture();
|
||||
}
|
||||
|
||||
// The mode decides which vertices land in the reduced set, so the sets are rebuilt.
|
||||
// Both decide which vertices land in the reduced set, so the sets are rebuilt.
|
||||
void ViewerImpl::set_reduced_detail_mode(EReducedDetailMode mode)
|
||||
{
|
||||
if (m_settings.reduced_detail_mode == mode)
|
||||
@@ -1545,6 +1546,14 @@ void ViewerImpl::set_reduced_detail_mode(EReducedDetailMode mode)
|
||||
m_settings.update_enabled_entities = true;
|
||||
}
|
||||
|
||||
void ViewerImpl::set_reduced_detail_hide_infill(bool value)
|
||||
{
|
||||
if (m_settings.reduced_detail_hide_infill == value)
|
||||
return;
|
||||
m_settings.reduced_detail_hide_infill = value;
|
||||
m_settings.update_enabled_entities = true;
|
||||
}
|
||||
|
||||
// ORCA: enable/disable darkening of the layers the layer slider is not scrubbed to
|
||||
void ViewerImpl::set_dim_previous_layers(bool value)
|
||||
{
|
||||
|
||||
@@ -122,6 +122,8 @@ public:
|
||||
bool is_reduced_detail() const { return m_settings.reduced_detail; }
|
||||
EReducedDetailMode get_reduced_detail_mode() const { return m_settings.reduced_detail_mode; }
|
||||
void set_reduced_detail_mode(EReducedDetailMode mode);
|
||||
bool get_reduced_detail_hide_infill() const { return m_settings.reduced_detail_hide_infill; }
|
||||
void set_reduced_detail_hide_infill(bool value);
|
||||
float get_dim_previous_layers_brightness() const { return m_settings.dim_previous_layers_brightness; }
|
||||
void set_dim_previous_layers_brightness(float value);
|
||||
|
||||
|
||||
@@ -1492,6 +1492,10 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const
|
||||
|
||||
// BBS: data for rendering color arrangement recommendation
|
||||
m_nozzle_nums = print.config().option<ConfigOptionFloats>("nozzle_diameter")->values.size();
|
||||
// the shell drag mode hides the infill only where the profile covers it: with no top or bottom
|
||||
// shell, or no walls, the infill is the surface. Per-object settings are not consulted.
|
||||
const PrintRegionConfig& region = print.default_region_config();
|
||||
m_viewer.set_reduced_detail_hide_infill(region.top_shell_layers.value > 0 && region.bottom_shell_layers.value > 0 && region.wall_loops.value > 0);
|
||||
// Orca hack: Hide filament group for non-bbl printers
|
||||
if (!print.is_BBL_printer()) m_nozzle_nums = 1;
|
||||
std::vector<int> filament_maps = print.get_filament_maps();
|
||||
|
||||
Reference in New Issue
Block a user