diff --git a/lib/Slic3r/GUI/Plater/3DPreview.pm b/lib/Slic3r/GUI/Plater/3DPreview.pm index 9ed2374ec..be21d20dc 100644 --- a/lib/Slic3r/GUI/Plater/3DPreview.pm +++ b/lib/Slic3r/GUI/Plater/3DPreview.pm @@ -77,10 +77,12 @@ sub new { $choice_view_type->Append(L("Speed")); $choice_view_type->Append(L("Volumetric flow rate")); $choice_view_type->Append(L("Tool")); + $choice_view_type->Append(L("Filament")); $choice_view_type->SetSelection(0); # the following value needs to be changed if new items are added into $choice_view_type before "Tool" $self->{tool_idx} = 5; + $self->{filament_idx} = 6; my $label_show_features = $self->{label_show_features} = Wx::StaticText->new($self, -1, L("Show")); @@ -357,6 +359,15 @@ sub load_print { push @colors, $color; } } + if($self->gcode_preview_data->type == $self->{filament_idx}) { + my @extruder_colors = @{$self->{config}->extruder_colour}; + my @filament_colors = @{$self->{config}->filament_colour}; + for (my $i = 0; $i <= $#extruder_colors; $i += 1) { + my $color = $filament_colors[$i]; + $color = '#FFFFFF' if (! defined($color) || $color !~ m/^#[[:xdigit:]]{6}/); + push @colors, $color; + } + } if ($self->IsShown) { # used to set the sliders to the extremes of the current zs range diff --git a/xs/src/libslic3r/GCode/PreviewData.cpp b/xs/src/libslic3r/GCode/PreviewData.cpp index 40f0747b2..0b186c8be 100644 --- a/xs/src/libslic3r/GCode/PreviewData.cpp +++ b/xs/src/libslic3r/GCode/PreviewData.cpp @@ -370,6 +370,8 @@ std::string GCodePreviewData::get_legend_title() const return L("Volumetric flow rate (mm3/s)"); case Extrusion::Tool: return L("Tool"); + case Extrusion::Filament: + return L("Filament"); } return ""; @@ -431,6 +433,7 @@ GCodePreviewData::LegendItemsList GCodePreviewData::get_legend_items(const std:: break; } case Extrusion::Tool: + case Extrusion::Filament: { unsigned int tools_colors_count = tool_colors.size() / 4; items.reserve(tools_colors_count); diff --git a/xs/src/libslic3r/GCode/PreviewData.hpp b/xs/src/libslic3r/GCode/PreviewData.hpp index ea8ca6d58..961613a7b 100644 --- a/xs/src/libslic3r/GCode/PreviewData.hpp +++ b/xs/src/libslic3r/GCode/PreviewData.hpp @@ -72,6 +72,7 @@ public: Feedrate, VolumetricRate, Tool, + Filament, Num_View_Types }; diff --git a/xs/src/slic3r/GUI/GLCanvas3D.cpp b/xs/src/slic3r/GUI/GLCanvas3D.cpp index 6f23af5a3..b82586d31 100644 --- a/xs/src/slic3r/GUI/GLCanvas3D.cpp +++ b/xs/src/slic3r/GUI/GLCanvas3D.cpp @@ -3674,6 +3674,7 @@ void GLCanvas3D::_load_gcode_extrusion_paths(const GCodePreviewData& preview_dat case GCodePreviewData::Extrusion::VolumetricRate: return path.feedrate * (float)path.mm3_per_mm; case GCodePreviewData::Extrusion::Tool: + case GCodePreviewData::Extrusion::Filament: return (float)path.extruder_id; default: return 0.0f; @@ -3697,6 +3698,7 @@ void GLCanvas3D::_load_gcode_extrusion_paths(const GCodePreviewData& preview_dat case GCodePreviewData::Extrusion::VolumetricRate: return data.get_volumetric_rate_color(value); case GCodePreviewData::Extrusion::Tool: + case GCodePreviewData::Extrusion::Filament: { GCodePreviewData::Color color; ::memcpy((void*)color.rgba, (const void*)(tool_colors.data() + (unsigned int)value * 4), 4 * sizeof(float)); @@ -3829,6 +3831,7 @@ void GLCanvas3D::_load_gcode_travel_paths(const GCodePreviewData& preview_data, break; } case GCodePreviewData::Extrusion::Tool: + case GCodePreviewData::Extrusion::Filament: { res = _travel_paths_by_tool(preview_data, tool_colors); break;