diff --git a/plugins/SolidView/SolidView.py b/plugins/SolidView/SolidView.py index 8f0c9a4dc1..3474fa88f2 100644 --- a/plugins/SolidView/SolidView.py +++ b/plugins/SolidView/SolidView.py @@ -27,25 +27,33 @@ class SolidView(View): self._enabled_shader = None self._disabled_shader = None + self._non_printing_shader = None self._extruders_model = ExtrudersModel() + self._theme = None def beginRendering(self): scene = self.getController().getScene() renderer = self.getRenderer() + if not self._theme: + self._theme = Application.getInstance().getTheme() + if not self._enabled_shader: self._enabled_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "overhang.shader")) - theme = Application.getInstance().getTheme() - self._enabled_shader.setUniformValue("u_overhangColor", Color(*theme.getColor("model_overhang").getRgb())) + self._enabled_shader.setUniformValue("u_overhangColor", Color(*self._theme.getColor("model_overhang").getRgb())) if not self._disabled_shader: self._disabled_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "striped.shader")) - theme = Application.getInstance().getTheme() - self._disabled_shader.setUniformValue("u_diffuseColor1", Color(*theme.getColor("model_unslicable").getRgb())) - self._disabled_shader.setUniformValue("u_diffuseColor2", Color(*theme.getColor("model_unslicable_alt").getRgb())) + self._disabled_shader.setUniformValue("u_diffuseColor1", Color(*self._theme.getColor("model_unslicable").getRgb())) + self._disabled_shader.setUniformValue("u_diffuseColor2", Color(*self._theme.getColor("model_unslicable_alt").getRgb())) self._disabled_shader.setUniformValue("u_width", 50.0) + if not self._non_printing_shader: + self._non_printing_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "transparent_object.shader")) + self._non_printing_shader.setUniformValue("u_diffuseColor", Color(*self._theme.getColor("model_non_printing").getRgb())) + self._non_printing_shader.setUniformValue("u_opacity", 0.6) + multi_extrusion = False global_container_stack = Application.getInstance().getGlobalContainerStack() @@ -110,13 +118,12 @@ class SolidView(View): except ValueError: pass - if hasattr(node, "_outside_buildarea"): - if node._outside_buildarea: - renderer.queueNode(node, shader = self._disabled_shader) - else: - renderer.queueNode(node, shader = self._enabled_shader, uniforms = uniforms) + if getattr(node, "_non_printing_mesh", False): + renderer.queueNode(node, shader = self._non_printing_shader, transparent = True) + elif getattr(node, "_outside_buildarea", False): + renderer.queueNode(node, shader = self._disabled_shader) else: - renderer.queueNode(node, material = self._enabled_shader, uniforms = uniforms) + renderer.queueNode(node, shader = self._enabled_shader, uniforms = uniforms) if node.callDecoration("isGroup") and Selection.isSelected(node): renderer.queueNode(scene.getRoot(), mesh = node.getBoundingBoxMesh(), mode = RenderBatch.RenderMode.LineLoop) diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 50ee600e4e..6d07ca09b8 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -256,6 +256,7 @@ "model_unslicable": [122, 122, 122, 255], "model_unslicable_alt": [172, 172, 127, 255], "model_selection_outline": [12, 169, 227, 255], + "model_non_printing": [122, 122, 122, 255], "xray": [26, 26, 62, 255], "xray_error": [255, 0, 0, 255],