diff --git a/cura/LayerPolygon.py b/cura/LayerPolygon.py index d6ab854169..59c900a263 100644 --- a/cura/LayerPolygon.py +++ b/cura/LayerPolygon.py @@ -18,10 +18,14 @@ class LayerPolygon: MoveCombingType = 8 MoveRetractionType = 9 SupportInterfaceType = 10 - __number_of_types = 11 + PurgeType = 11 + + __number_of_types = 12 + + __jump_map = numpy.logical_or(numpy.logical_or(numpy.arange(__number_of_types) == NoneType, + numpy.arange(__number_of_types) == MoveCombingType), + numpy.arange(__number_of_types) == MoveRetractionType) - __jump_map = numpy.logical_or(numpy.logical_or(numpy.arange(__number_of_types) == NoneType, numpy.arange(__number_of_types) == MoveCombingType), numpy.arange(__number_of_types) == MoveRetractionType) - ## LayerPolygon, used in ProcessSlicedLayersJob # \param extruder # \param line_types array with line_types @@ -222,7 +226,8 @@ class LayerPolygon: theme.getColor("layerview_support_infill").getRgbF(), # SupportInfillType theme.getColor("layerview_move_combing").getRgbF(), # MoveCombingType theme.getColor("layerview_move_retraction").getRgbF(), # MoveRetractionType - theme.getColor("layerview_support_interface").getRgbF() # SupportInterfaceType + theme.getColor("layerview_support_interface").getRgbF(), # SupportInterfaceType + theme.getColor("layerview_purge").getRgbF() # PurgeType ]) return cls.__color_map diff --git a/plugins/LayerView/LayerPass.py b/plugins/LayerView/LayerPass.py index 51a35fb48a..269e28d473 100755 --- a/plugins/LayerView/LayerPass.py +++ b/plugins/LayerView/LayerPass.py @@ -51,6 +51,7 @@ class LayerPass(RenderPass): self._layer_shader.setUniformValue("u_show_helpers", self._layer_view.getShowHelpers()) self._layer_shader.setUniformValue("u_show_skin", self._layer_view.getShowSkin()) self._layer_shader.setUniformValue("u_show_infill", self._layer_view.getShowInfill()) + self._layer_shader.setUniformValue("u_show_purge", self._layer_view.getShowPurge()) else: #defaults self._layer_shader.setUniformValue("u_layer_view_type", 1) @@ -59,6 +60,7 @@ class LayerPass(RenderPass): self._layer_shader.setUniformValue("u_show_helpers", 1) self._layer_shader.setUniformValue("u_show_skin", 1) self._layer_shader.setUniformValue("u_show_infill", 1) + self._layer_shader.setUniformValue("u_show_purge", 1) if not self._tool_handle_shader: self._tool_handle_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "toolhandle.shader")) diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py index 97a343bd33..4230c0f9e0 100755 --- a/plugins/LayerView/LayerView.py +++ b/plugins/LayerView/LayerView.py @@ -82,6 +82,7 @@ class LayerView(View): Preferences.getInstance().addPreference("layerview/show_helpers", True) Preferences.getInstance().addPreference("layerview/show_skin", True) Preferences.getInstance().addPreference("layerview/show_infill", True) + Preferences.getInstance().addPreference("layerview/show_purge", True) Preferences.getInstance().preferenceChanged.connect(self._onPreferencesChanged) self._updateWithPreferences() @@ -100,6 +101,7 @@ class LayerView(View): self._show_helpers = 1 self._show_skin = 1 self._show_infill = 1 + self._show_purge = 1 def getActivity(self): return self._activity @@ -237,6 +239,13 @@ class LayerView(View): def getShowInfill(self): return self._show_infill + def setShowPurge(self, show): + self._show_purge = show + self.currentLayerNumChanged.emit() + + def getShowPurge(self): + return self._show_purge + def getCompatibilityMode(self): return self._compatibility_mode @@ -408,6 +417,7 @@ class LayerView(View): self.setShowHelpers(bool(Preferences.getInstance().getValue("layerview/show_helpers"))) self.setShowSkin(bool(Preferences.getInstance().getValue("layerview/show_skin"))) self.setShowInfill(bool(Preferences.getInstance().getValue("layerview/show_infill"))) + self.setShowPurge(bool(Preferences.getInstance().getValue("layerview/show_purge"))) self._startUpdateTopLayers() self.preferencesChanged.emit() @@ -423,6 +433,7 @@ class LayerView(View): "layerview/show_helpers", "layerview/show_skin", "layerview/show_infill", + "layerview/show_purge", }: return diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 9dc038fe70..1757d72ac7 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -43,6 +43,7 @@ Item property bool show_helpers: UM.Preferences.getValue("layerview/show_helpers") property bool show_skin: UM.Preferences.getValue("layerview/show_skin") property bool show_infill: UM.Preferences.getValue("layerview/show_infill") + property bool show_purge: UM.Preferences.getValue("layerview/show_purge") // if we are in compatibility mode, we only show the "line type" property bool show_legend: UM.LayerView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type") == 1 property bool only_show_top_layers: UM.Preferences.getValue("view/only_show_top_layers") @@ -157,6 +158,7 @@ Item view_settings.show_helpers = UM.Preferences.getValue("layerview/show_helpers"); view_settings.show_skin = UM.Preferences.getValue("layerview/show_skin"); view_settings.show_infill = UM.Preferences.getValue("layerview/show_infill"); + view_settings.show_purge = UM.Preferences.getValue("layerview/show_purge"); view_settings.only_show_top_layers = UM.Preferences.getValue("view/only_show_top_layers"); view_settings.top_layer_count = UM.Preferences.getValue("view/top_layer_count"); } @@ -219,6 +221,12 @@ Item preference: "layerview/show_infill", colorId: "layerview_infill" }); + typesLegenModel.append({ + label: catalog.i18nc("@label", "Show Purge"), + initialValue: view_settings.show_purge, + preference: "layerview/show_purge", + colorId: "layerview_purge" + }); } } diff --git a/plugins/LayerView/layers.shader b/plugins/LayerView/layers.shader index d340773403..2f7a01cf11 100755 --- a/plugins/LayerView/layers.shader +++ b/plugins/LayerView/layers.shader @@ -35,6 +35,7 @@ fragment = uniform int u_show_helpers; uniform int u_show_skin; uniform int u_show_infill; + uniform int u_show_purge; void main() { @@ -62,6 +63,11 @@ fragment = // discard movements discard; } + // purge: + if ((u_show_purge == 0) && (v_line_type >= 10.5) && (v_line_type <= 11.5)) { + // discard movements + discard; + } gl_FragColor = v_color; } @@ -103,6 +109,7 @@ fragment41core = uniform int u_show_helpers; uniform int u_show_skin; uniform int u_show_infill; + uniform int u_show_purge; void main() { @@ -130,6 +137,11 @@ fragment41core = // discard movements discard; } + // purge: + if ((u_show_purge == 0) && (v_line_type >= 10.5) && (v_line_type <= 11.5)) { + // discard movements + discard; + } frag_color = v_color; } @@ -144,6 +156,7 @@ u_show_travel_moves = 0 u_show_helpers = 1 u_show_skin = 1 u_show_infill = 1 +u_show_purge = 1 [bindings] u_modelViewProjectionMatrix = model_view_projection_matrix diff --git a/plugins/LayerView/layers3d.shader b/plugins/LayerView/layers3d.shader index 6f5e986eec..ef6286c831 100755 --- a/plugins/LayerView/layers3d.shader +++ b/plugins/LayerView/layers3d.shader @@ -71,6 +71,7 @@ geometry41core = uniform int u_show_helpers; uniform int u_show_skin; uniform int u_show_infill; + uniform int u_show_purge; layout(lines) in; layout(triangle_strip, max_vertices = 26) out; @@ -125,6 +126,9 @@ geometry41core = if ((u_show_infill == 0) && (v_line_type[0] == 6)) { return; } + if ((u_show_purge == 0) && (v_line_type[0] == 11)) { + return; + } if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) { // fixed size for movements @@ -246,6 +250,7 @@ u_show_travel_moves = 0 u_show_helpers = 1 u_show_skin = 1 u_show_infill = 1 +u_show_purge = 1 [bindings] u_modelViewProjectionMatrix = model_view_projection_matrix diff --git a/resources/themes/cura/theme.json b/resources/themes/cura/theme.json index a36f271fe8..e2de9e230d 100644 --- a/resources/themes/cura/theme.json +++ b/resources/themes/cura/theme.json @@ -246,7 +246,8 @@ "layerview_support_infill": [0, 255, 255, 255], "layerview_move_combing": [0, 0, 255, 255], "layerview_move_retraction": [128, 128, 255, 255], - "layerview_support_interface": [64, 192, 255, 255] + "layerview_support_interface": [64, 192, 255, 255], + "layerview_purge": [101, 51, 175, 255] }, "sizes": { @@ -306,7 +307,7 @@ "slider_layerview_background": [4.0, 0.0], "slider_layerview_margin": [1.0, 1.0], - "layerview_menu_size": [16.5, 21.0], + "layerview_menu_size": [16.5, 23.0], "layerview_menu_size_compatibility": [22, 23.0], "layerview_legend_size": [1.0, 1.0], "layerview_row": [11.0, 1.5],