Browse Source

Merge branch 'mb-fix-flow-rates-min-max' of https://github.com/smartavionics/Cura

Jaime van Kessel 3 years ago
parent
commit
dc8c5e4268
1 changed files with 15 additions and 9 deletions
  1. 15 9
      plugins/SimulationView/SimulationView.py

+ 15 - 9
plugins/SimulationView/SimulationView.py

@@ -90,11 +90,12 @@ class SimulationView(CuraView):
 
         self._max_feedrate = sys.float_info.min
         self._min_feedrate = sys.float_info.max
-        self._max_feedrate_with_extrusion = sys.float_info.min
         self._max_thickness = sys.float_info.min
         self._min_thickness = sys.float_info.max
         self._max_line_width = sys.float_info.min
         self._min_line_width = sys.float_info.max
+        self._min_flow_rate = sys.float_info.max
+        self._max_flow_rate = sys.float_info.min
 
         self._global_container_stack = None  # type: Optional[ContainerStack]
         self._proxy = None
@@ -413,13 +414,12 @@ class SimulationView(CuraView):
         return self._min_line_width
 
     def getMaxFlowRate(self) -> float:
-        return self._max_line_width * self._max_thickness * self._max_feedrate_with_extrusion
+        return self._max_flow_rate
 
     def getMinFlowRate(self) -> float:
-        min_flow_rate = self._min_line_width * self._min_thickness * self._min_feedrate
-        if abs(min_flow_rate - sys.float_info.max) < 10:  # Some lenience due to floating point rounding.
+        if abs(self._min_flow_rate - sys.float_info.max) < 10:  # Some lenience due to floating point rounding.
             return 0.0  # If it's still max-float, there are no measurements. Use 0 then.
-        return min_flow_rate
+        return self._min_flow_rate
 
     def calculateMaxLayers(self) -> None:
         """
@@ -474,19 +474,21 @@ class SimulationView(CuraView):
         # Before we start, save the old values so that we can tell if any of the spectrums need to change.
         old_min_feedrate = self._min_feedrate
         old_max_feedrate = self._max_feedrate
-        old_max_feedrate_with_extrusion = self._max_feedrate_with_extrusion
         old_min_linewidth = self._min_line_width
         old_max_linewidth = self._max_line_width
         old_min_thickness = self._min_thickness
         old_max_thickness = self._max_thickness
+        old_min_flow_rate = self._min_flow_rate
+        old_max_flow_rate = self._max_flow_rate
 
         self._min_feedrate = sys.float_info.max
         self._max_feedrate = sys.float_info.min
-        self._max_feedrate_with_extrusion = sys.float_info.min
         self._min_line_width = sys.float_info.max
         self._max_line_width = sys.float_info.min
         self._min_thickness = sys.float_info.max
         self._max_thickness = sys.float_info.min
+        self._min_flow_rate = sys.float_info.max
+        self._max_flow_rate = sys.float_info.min
 
         # The colour scheme is only influenced by the visible lines, so filter the lines by if they should be visible.
         visible_line_types = []
@@ -522,10 +524,14 @@ class SimulationView(CuraView):
                     visible_feedrates = numpy.take(polyline.lineFeedrates, visible_indices)
                     visible_feedrates_with_extrusion = numpy.take(polyline.lineFeedrates, visible_indicies_with_extrusion)
                     visible_linewidths = numpy.take(polyline.lineWidths, visible_indices)
+                    visible_linewidths_with_extrusion = numpy.take(polyline.lineWidths, visible_indicies_with_extrusion)
                     visible_thicknesses = numpy.take(polyline.lineThicknesses, visible_indices)
+                    visible_thicknesses_with_extrusion = numpy.take(polyline.lineThicknesses, visible_indicies_with_extrusion)
                     self._max_feedrate = max(float(visible_feedrates.max()), self._max_feedrate)
                     if visible_feedrates_with_extrusion.size != 0:
-                        self._max_feedrate_with_extrusion = max(float(visible_feedrates_with_extrusion.max()), self._max_feedrate_with_extrusion)
+                        flow_rates = visible_feedrates_with_extrusion * visible_linewidths_with_extrusion * visible_thicknesses_with_extrusion
+                        self._min_flow_rate = min(float(flow_rates.min()), self._min_flow_rate)
+                        self._max_flow_rate = max(float(flow_rates.max()), self._max_flow_rate)
                     self._min_feedrate = min(float(visible_feedrates.min()), self._min_feedrate)
                     self._max_line_width = max(float(visible_linewidths.max()), self._max_line_width)
                     self._min_line_width = min(float(visible_linewidths.min()), self._min_line_width)
@@ -539,7 +545,7 @@ class SimulationView(CuraView):
         if old_min_feedrate != self._min_feedrate or old_max_feedrate != self._max_feedrate \
                 or old_min_linewidth != self._min_line_width or old_max_linewidth != self._max_line_width \
                 or old_min_thickness != self._min_thickness or old_max_thickness != self._max_thickness \
-                or old_max_feedrate_with_extrusion != self._max_feedrate_with_extrusion:
+                or old_min_flow_rate != self._min_flow_rate or old_max_flow_rate != self._max_flow_rate:
             self.colorSchemeLimitsChanged.emit()
 
     def calculateMaxPathsOnLayer(self, layer_num: int) -> None: