mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-20 13:17:51 -06:00
Invert colors at lowest print height.
Instead of inverting them if below 0 (build-plate). Fixes #8735 CURA-7871
This commit is contained in:
parent
39acad87d9
commit
2837640315
3 changed files with 35 additions and 8 deletions
|
@ -56,7 +56,8 @@ class SolidView(View):
|
||||||
|
|
||||||
self._extruders_model = None
|
self._extruders_model = None
|
||||||
self._theme = None
|
self._theme = None
|
||||||
self._support_angle = 90
|
self._support_angle = self._retrieveSupportAngle()
|
||||||
|
self._lowest_printable_height = self._retrieveLowestPrintHeight()
|
||||||
|
|
||||||
self._global_stack = None
|
self._global_stack = None
|
||||||
|
|
||||||
|
@ -95,12 +96,20 @@ class SolidView(View):
|
||||||
self._global_stack.propertyChanged.connect(self._onPropertyChanged)
|
self._global_stack.propertyChanged.connect(self._onPropertyChanged)
|
||||||
for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks():
|
for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks():
|
||||||
extruder_stack.propertyChanged.connect(self._onPropertyChanged)
|
extruder_stack.propertyChanged.connect(self._onPropertyChanged)
|
||||||
self._onPropertyChanged("support_angle", "value") # Force an re-evaluation
|
# Force re-evaluation:
|
||||||
|
self._support_angle = self._retrieveSupportAngle()
|
||||||
|
self._lowest_printable_height = self._retrieveLowestPrintHeight()
|
||||||
|
|
||||||
def _onPropertyChanged(self, key: str, property_name: str) -> None:
|
def _onPropertyChanged(self, key: str, property_name: str) -> None:
|
||||||
if key != "support_angle" or property_name != "value":
|
if property_name != "value":
|
||||||
return
|
return
|
||||||
# As the rendering is called a *lot* we really, dont want to re-evaluate the property every time. So we store em!
|
# As the rendering is called a *lot* we really, dont want to re-evaluate the property every time. So we store em!
|
||||||
|
if key == "support_angle":
|
||||||
|
self._support_angle = self._retrieveSupportAngle()
|
||||||
|
elif key == "layer_height_0" or key == "slicing_tolerance":
|
||||||
|
self._lowest_printable_height = self._retrieveLowestPrintHeight()
|
||||||
|
|
||||||
|
def _retrieveSupportAngle(self) -> float:
|
||||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||||
if global_container_stack:
|
if global_container_stack:
|
||||||
support_extruder_nr = int(global_container_stack.getExtruderPositionValueWithDefault("support_extruder_nr"))
|
support_extruder_nr = int(global_container_stack.getExtruderPositionValueWithDefault("support_extruder_nr"))
|
||||||
|
@ -111,7 +120,18 @@ class SolidView(View):
|
||||||
else:
|
else:
|
||||||
angle = support_angle_stack.getProperty("support_angle", "value")
|
angle = support_angle_stack.getProperty("support_angle", "value")
|
||||||
if angle is not None:
|
if angle is not None:
|
||||||
self._support_angle = angle
|
return angle
|
||||||
|
return 90.0
|
||||||
|
|
||||||
|
def _retrieveLowestPrintHeight(self) -> float:
|
||||||
|
min_height = 0.0
|
||||||
|
for extruder in Application.getInstance().getExtruderManager().getActiveExtruderStacks():
|
||||||
|
init_layer_height = extruder.getProperty("layer_height_0", "value")
|
||||||
|
tolerance_setting = extruder.getProperty("slicing_tolerance", "value")
|
||||||
|
if tolerance_setting == "middle":
|
||||||
|
init_layer_height /= 2.0
|
||||||
|
min_height = max(min_height, init_layer_height / 2.0)
|
||||||
|
return min_height
|
||||||
|
|
||||||
def _checkSetup(self):
|
def _checkSetup(self):
|
||||||
if not self._extruders_model:
|
if not self._extruders_model:
|
||||||
|
@ -194,6 +214,7 @@ class SolidView(View):
|
||||||
self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0))) #Overhang angle of 0 causes no area at all to be marked as overhang.
|
self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0))) #Overhang angle of 0 causes no area at all to be marked as overhang.
|
||||||
else:
|
else:
|
||||||
self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0)))
|
self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0)))
|
||||||
|
self._enabled_shader.setUniformValue("u_lowestPrintableHeight", self._lowest_printable_height)
|
||||||
disabled_batch = renderer.createRenderBatch(shader = self._disabled_shader)
|
disabled_batch = renderer.createRenderBatch(shader = self._disabled_shader)
|
||||||
normal_object_batch = renderer.createRenderBatch(shader = self._enabled_shader)
|
normal_object_batch = renderer.createRenderBatch(shader = self._enabled_shader)
|
||||||
renderer.addRenderBatch(disabled_batch)
|
renderer.addRenderBatch(disabled_batch)
|
||||||
|
|
|
@ -32,6 +32,7 @@ fragment =
|
||||||
|
|
||||||
uniform lowp float u_overhangAngle;
|
uniform lowp float u_overhangAngle;
|
||||||
uniform lowp vec4 u_overhangColor;
|
uniform lowp vec4 u_overhangColor;
|
||||||
|
uniform lowp float u_lowestPrintableHeight;
|
||||||
uniform lowp vec4 u_faceColor;
|
uniform lowp vec4 u_faceColor;
|
||||||
uniform highp int u_faceId;
|
uniform highp int u_faceId;
|
||||||
|
|
||||||
|
@ -65,7 +66,7 @@ fragment =
|
||||||
|
|
||||||
highp vec3 grid = vec3(f_vertex.x - floor(f_vertex.x - 0.5), f_vertex.y - floor(f_vertex.y - 0.5), f_vertex.z - floor(f_vertex.z - 0.5));
|
highp vec3 grid = vec3(f_vertex.x - floor(f_vertex.x - 0.5), f_vertex.y - floor(f_vertex.y - 0.5), f_vertex.z - floor(f_vertex.z - 0.5));
|
||||||
finalColor.a = (u_renderError > 0.5) && dot(grid, grid) < 0.245 ? 0.667 : 1.0;
|
finalColor.a = (u_renderError > 0.5) && dot(grid, grid) < 0.245 ? 0.667 : 1.0;
|
||||||
if (f_vertex.y <= 0.0)
|
if (f_vertex.y <= u_lowestPrintableHeight)
|
||||||
{
|
{
|
||||||
finalColor.rgb = vec3(1.0, 1.0, 1.0) - finalColor.rgb;
|
finalColor.rgb = vec3(1.0, 1.0, 1.0) - finalColor.rgb;
|
||||||
}
|
}
|
||||||
|
@ -109,6 +110,7 @@ fragment41core =
|
||||||
|
|
||||||
uniform lowp float u_overhangAngle;
|
uniform lowp float u_overhangAngle;
|
||||||
uniform lowp vec4 u_overhangColor;
|
uniform lowp vec4 u_overhangColor;
|
||||||
|
uniform lowp float u_lowestPrintableHeight;
|
||||||
uniform lowp vec4 u_faceColor;
|
uniform lowp vec4 u_faceColor;
|
||||||
uniform highp int u_faceId;
|
uniform highp int u_faceId;
|
||||||
|
|
||||||
|
@ -141,7 +143,7 @@ fragment41core =
|
||||||
finalColor = (u_faceId != gl_PrimitiveID) ? ((f_vertex.y > 0.0001 && -normal.y > u_overhangAngle) ? u_overhangColor : finalColor) : u_faceColor;
|
finalColor = (u_faceId != gl_PrimitiveID) ? ((f_vertex.y > 0.0001 && -normal.y > u_overhangAngle) ? u_overhangColor : finalColor) : u_faceColor;
|
||||||
|
|
||||||
frag_color = finalColor;
|
frag_color = finalColor;
|
||||||
if (f_vertex.y <= 0.0)
|
if (f_vertex.y <= u_lowestPrintableHeight)
|
||||||
{
|
{
|
||||||
frag_color.rgb = vec3(1.0, 1.0, 1.0) - frag_color.rgb;
|
frag_color.rgb = vec3(1.0, 1.0, 1.0) - frag_color.rgb;
|
||||||
}
|
}
|
||||||
|
@ -157,6 +159,7 @@ u_overhangColor = [1.0, 0.0, 0.0, 1.0]
|
||||||
u_faceColor = [0.0, 0.0, 1.0, 1.0]
|
u_faceColor = [0.0, 0.0, 1.0, 1.0]
|
||||||
u_shininess = 20.0
|
u_shininess = 20.0
|
||||||
u_renderError = 1.0
|
u_renderError = 1.0
|
||||||
|
u_lowestPrintableHeight = 0.0
|
||||||
|
|
||||||
[bindings]
|
[bindings]
|
||||||
u_modelMatrix = model_matrix
|
u_modelMatrix = model_matrix
|
||||||
|
|
|
@ -36,6 +36,7 @@ fragment =
|
||||||
|
|
||||||
uniform mediump float u_width;
|
uniform mediump float u_width;
|
||||||
uniform bool u_vertical_stripes;
|
uniform bool u_vertical_stripes;
|
||||||
|
uniform lowp u_lowestPrintableHeight;
|
||||||
|
|
||||||
varying highp vec3 v_position;
|
varying highp vec3 v_position;
|
||||||
varying highp vec3 v_vertex;
|
varying highp vec3 v_vertex;
|
||||||
|
@ -64,7 +65,7 @@ fragment =
|
||||||
highp vec3 viewVector = normalize(u_viewPosition - v_vertex);
|
highp vec3 viewVector = normalize(u_viewPosition - v_vertex);
|
||||||
highp float NdotR = clamp(dot(viewVector, reflectedLight), 0.0, 1.0);
|
highp float NdotR = clamp(dot(viewVector, reflectedLight), 0.0, 1.0);
|
||||||
finalColor += pow(NdotR, u_shininess) * u_specularColor;
|
finalColor += pow(NdotR, u_shininess) * u_specularColor;
|
||||||
if (v_vertex.y <= 0.0)
|
if (v_vertex.y <= u_lowestPrintableHeight)
|
||||||
{
|
{
|
||||||
finalColor.rgb = vec3(1.0, 1.0, 1.0) - finalColor.rgb;
|
finalColor.rgb = vec3(1.0, 1.0, 1.0) - finalColor.rgb;
|
||||||
}
|
}
|
||||||
|
@ -112,6 +113,7 @@ fragment41core =
|
||||||
|
|
||||||
uniform mediump float u_width;
|
uniform mediump float u_width;
|
||||||
uniform mediump bool u_vertical_stripes;
|
uniform mediump bool u_vertical_stripes;
|
||||||
|
uniform lowp float u_lowestPrintableHeight;
|
||||||
|
|
||||||
in highp vec3 v_position;
|
in highp vec3 v_position;
|
||||||
in highp vec3 v_vertex;
|
in highp vec3 v_vertex;
|
||||||
|
@ -144,7 +146,7 @@ fragment41core =
|
||||||
finalColor += pow(NdotR, u_shininess) * u_specularColor;
|
finalColor += pow(NdotR, u_shininess) * u_specularColor;
|
||||||
|
|
||||||
frag_color = finalColor;
|
frag_color = finalColor;
|
||||||
if (v_vertex.y <= 0.0)
|
if (v_vertex.y <= u_lowestPrintableHeight)
|
||||||
{
|
{
|
||||||
frag_color.rgb = vec3(1.0, 1.0, 1.0) - frag_color.rgb;
|
frag_color.rgb = vec3(1.0, 1.0, 1.0) - frag_color.rgb;
|
||||||
}
|
}
|
||||||
|
@ -160,6 +162,7 @@ u_opacity = 1.0
|
||||||
u_shininess = 20.0
|
u_shininess = 20.0
|
||||||
u_width = 5.0
|
u_width = 5.0
|
||||||
u_vertical_stripes = 0
|
u_vertical_stripes = 0
|
||||||
|
u_lowestPrintableHeight = 0.0
|
||||||
|
|
||||||
[bindings]
|
[bindings]
|
||||||
u_modelMatrix = model_matrix
|
u_modelMatrix = model_matrix
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue