Skip to content

Commit dc68fbc

Browse files
committedFeb 19, 2021
Add colour scheme for line width
Implements CURA-7741.
1 parent 0c9175d commit dc68fbc

5 files changed

+68
-3
lines changed
 

‎plugins/SimulationView/SimulationPass.py

+4
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ def render(self):
6969
self._layer_shader.setUniformValue("u_min_feedrate", self._layer_view.getMinFeedrate())
7070
self._layer_shader.setUniformValue("u_max_thickness", self._layer_view.getMaxThickness())
7171
self._layer_shader.setUniformValue("u_min_thickness", self._layer_view.getMinThickness())
72+
self._layer_shader.setUniformValue("u_max_line_width", self._layer_view.getMaxLineWidth())
73+
self._layer_shader.setUniformValue("u_min_line_width", self._layer_view.getMinLineWidth())
7274
self._layer_shader.setUniformValue("u_layer_view_type", self._layer_view.getSimulationViewType())
7375
self._layer_shader.setUniformValue("u_extruder_opacity", self._layer_view.getExtruderOpacities())
7476
self._layer_shader.setUniformValue("u_show_travel_moves", self._layer_view.getShowTravelMoves())
@@ -82,6 +84,8 @@ def render(self):
8284
self._layer_shader.setUniformValue("u_min_feedrate", 0)
8385
self._layer_shader.setUniformValue("u_max_thickness", 1)
8486
self._layer_shader.setUniformValue("u_min_thickness", 0)
87+
self._layer_shader.setUniformValue("u_max_line_width", 1)
88+
self._layer_shader.setUniformValue("u_min_line_width", 0)
8589
self._layer_shader.setUniformValue("u_layer_view_type", 1)
8690
self._layer_shader.setUniformValue("u_extruder_opacity", [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]])
8791
self._layer_shader.setUniformValue("u_show_travel_moves", 0)

‎plugins/SimulationView/SimulationView.py

+14
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ def __init__(self, parent = None) -> None:
9191
self._min_feedrate = sys.float_info.max
9292
self._max_thickness = sys.float_info.min
9393
self._min_thickness = sys.float_info.max
94+
self._max_line_width = sys.float_info.min
95+
self._min_line_width = sys.float_info.max
9496

9597
self._global_container_stack = None # type: Optional[ContainerStack]
9698
self._proxy = None
@@ -220,6 +222,8 @@ def resetLayerData(self) -> None:
220222
self._min_feedrate = sys.float_info.max
221223
self._max_thickness = sys.float_info.min
222224
self._min_thickness = sys.float_info.max
225+
self._max_line_width = sys.float_info.min
226+
self._min_line_width = sys.float_info.max
223227

224228
def beginRendering(self) -> None:
225229
scene = self.getController().getScene()
@@ -386,6 +390,14 @@ def getMinThickness(self) -> float:
386390
def getMaxThickness(self) -> float:
387391
return self._max_thickness
388392

393+
def getMaxLineWidth(self) -> float:
394+
return self._max_line_width
395+
396+
def getMinLineWidth(self) -> float:
397+
if abs(self._min_line_width - sys.float_info.max) < 10: # Some lenience due to floating point rounding.
398+
return 0.0 # If it's still max-float, there are no measurements. Use 0 then.
399+
return self._min_line_width
400+
389401
def calculateMaxLayers(self) -> None:
390402
scene = self.getController().getScene()
391403

@@ -410,6 +422,8 @@ def calculateMaxLayers(self) -> None:
410422
for p in layer_data.getLayer(layer_id).polygons:
411423
self._max_feedrate = max(float(p.lineFeedrates.max()), self._max_feedrate)
412424
self._min_feedrate = min(float(p.lineFeedrates.min()), self._min_feedrate)
425+
self._max_line_width = max(float(p.lineWidths.max()), self._max_line_width)
426+
self._min_line_width = min(float(p.lineWidths.min()), self._min_line_width)
413427
self._max_thickness = max(float(p.lineThicknesses.max()), self._max_thickness)
414428
try:
415429
self._min_thickness = min(float(p.lineThicknesses[numpy.nonzero(p.lineThicknesses)].min()), self._min_thickness)

‎plugins/SimulationView/SimulationViewMenuComponent.qml

+24-3
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ Cura.ExpandableComponent
8989
property bool show_gradient: UM.SimulationView.compatibilityMode ? false : UM.Preferences.getValue("layerview/layer_view_type") == 2 || UM.Preferences.getValue("layerview/layer_view_type") == 3
9090
property bool show_feedrate_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 2
9191
property bool show_thickness_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 3
92+
property bool show_line_width_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 4
9293
property bool only_show_top_layers: UM.Preferences.getValue("view/only_show_top_layers")
9394
property int top_layer_count: UM.Preferences.getValue("view/top_layer_count")
9495

@@ -117,9 +118,13 @@ Cura.ExpandableComponent
117118
type_id: 2
118119
})
119120
layerViewTypes.append({
120-
text: catalog.i18nc("@label:listbox", "Layer thickness"),
121+
text: catalog.i18nc("@label:listbox", "Layer Thickness"),
121122
type_id: 3 // these ids match the switching in the shader
122123
})
124+
layerViewTypes.append({
125+
text: catalog.i18nc("@label:listbox", "Line Width"),
126+
type_id: 4
127+
})
123128
}
124129

125130
ComboBox
@@ -145,9 +150,10 @@ Cura.ExpandableComponent
145150
{
146151
// Update the visibility of the legends.
147152
viewSettings.show_legend = UM.SimulationView.compatibilityMode || (type_id == 1);
148-
viewSettings.show_gradient = !UM.SimulationView.compatibilityMode && (type_id == 2 || type_id == 3);
153+
viewSettings.show_gradient = !UM.SimulationView.compatibilityMode && (type_id == 2 || type_id == 3 || type_id == 4);
149154
viewSettings.show_feedrate_gradient = viewSettings.show_gradient && (type_id == 2);
150155
viewSettings.show_thickness_gradient = viewSettings.show_gradient && (type_id == 3);
156+
viewSettings.show_line_width_gradient = viewSettings.show_gradient && (type_id == 4);
151157
}
152158
}
153159

@@ -390,6 +396,11 @@ Cura.ExpandableComponent
390396
{
391397
return parseFloat(UM.SimulationView.getMinThickness()).toFixed(2)
392398
}
399+
//Line width selected
400+
if(UM.Preferences.getValue("layerview/layer_view_type") == 4)
401+
{
402+
return parseFloat(UM.SimulationView.getMinLineWidth()).toFixed(2);
403+
}
393404
}
394405
return catalog.i18nc("@label","min")
395406
}
@@ -415,6 +426,11 @@ Cura.ExpandableComponent
415426
{
416427
return "mm"
417428
}
429+
//Line width selected
430+
if(UM.Preferences.getValue("layerview/layer_view_type") == 4)
431+
{
432+
return "mm"
433+
}
418434
}
419435
return ""
420436
}
@@ -439,6 +455,11 @@ Cura.ExpandableComponent
439455
{
440456
return parseFloat(UM.SimulationView.getMaxThickness()).toFixed(2)
441457
}
458+
//Line width selected
459+
if(UM.Preferences.getValue("layerview/layer_view_type") == 4)
460+
{
461+
return parseFloat(UM.SimulationView.getMaxLineWidth()).toFixed(2);
462+
}
442463
}
443464
return catalog.i18nc("@label","max")
444465
}
@@ -453,7 +474,7 @@ Cura.ExpandableComponent
453474
Rectangle
454475
{
455476
id: feedrateGradient
456-
visible: viewSettings.show_feedrate_gradient
477+
visible: viewSettings.show_feedrate_gradient || viewSettings.show_line_width_gradient
457478
anchors.left: parent.left
458479
anchors.right: parent.right
459480
height: Math.round(UM.Theme.getSize("layerview_row").height * 1.5)

‎plugins/SimulationView/SimulationViewProxy.py

+8
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,14 @@ def getMinThickness(self):
117117
def getMaxThickness(self):
118118
return self._simulation_view.getMaxThickness()
119119

120+
@pyqtSlot(result=float)
121+
def getMaxLineWidth(self):
122+
return self._simulation_view.getMaxLineWidth()
123+
124+
@pyqtSlot(result=float)
125+
def getMinLineWidth(self):
126+
return self._simulation_view.getMinLineWidth()
127+
120128
# Opacity 0..1
121129
@pyqtSlot(int, float)
122130
def setExtruderOpacity(self, extruder_nr, opacity):

‎plugins/SimulationView/layers3d.shader

+18
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ vertex41core =
1010
uniform lowp float u_min_feedrate;
1111
uniform lowp float u_max_thickness;
1212
uniform lowp float u_min_thickness;
13+
uniform lowp float u_max_line_width;
14+
uniform lowp float u_min_line_width;
1315
uniform lowp int u_layer_view_type;
1416
uniform lowp mat4 u_extruder_opacity; // currently only for max 16 extruders, others always visible
1517

@@ -66,6 +68,19 @@ vertex41core =
6668
return vec4(red, green, blue, 1.0);
6769
}
6870

71+
vec4 lineWidthGradientColor(float abs_value, float min_value, float max_value)
72+
{
73+
float value = (abs_value - min_value) / (max_value - min_value);
74+
float red = value;
75+
float green = 1 - abs(1 - 4 * value);
76+
if(value > 0.375)
77+
{
78+
green = 0.5;
79+
}
80+
float blue = max(1 - 4 * value, 0);
81+
return vec4(red, green, blue, 1.0);
82+
}
83+
6984
void main()
7085
{
7186
vec4 v1_vertex = a_vertex;
@@ -88,6 +103,9 @@ vertex41core =
88103
case 3: // "Layer thickness"
89104
v_color = layerThicknessGradientColor(a_line_dim.y, u_min_thickness, u_max_thickness);
90105
break;
106+
case 4: // "Line width"
107+
v_color = lineWidthGradientColor(a_line_dim.x, u_min_line_width, u_max_line_width);
108+
break;
91109
}
92110

93111
v_vertex = world_space_vert.xyz;

0 commit comments

Comments
 (0)
Please sign in to comment.