diff --git a/plugins/LayerView/LayerPass.py b/plugins/LayerView/LayerPass.py index 2ff4b14ec6..2fce95b18b 100644 --- a/plugins/LayerView/LayerPass.py +++ b/plugins/LayerView/LayerPass.py @@ -81,6 +81,8 @@ class LayerPass(RenderPass): for layer, counts in element_counts.items(): if layer > self._layer_view._current_layer_num: break + if self._layer_view._minimum_layer_num > layer: + start += counts end += counts # This uses glDrawRangeElements internally to only draw a certain range of lines. diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py index a1e48ee3a6..d39fb38d58 100644 --- a/plugins/LayerView/LayerView.py +++ b/plugins/LayerView/LayerView.py @@ -41,6 +41,7 @@ class LayerView(View): self._max_layers = 0 self._current_layer_num = 0 + self._minimum_layer_num = 0 self._current_layer_mesh = None self._current_layer_jumps = None self._top_layers_job = None @@ -94,6 +95,9 @@ class LayerView(View): def getCurrentLayer(self): return self._current_layer_num + def getMinimumLayer(self): + return self._minimum_layer_num + def _onSceneChanged(self, node): self.calculateMaxLayers() @@ -144,6 +148,18 @@ class LayerView(View): self.currentLayerNumChanged.emit() + def setMinimumLayer(self, value): + if self._minimum_layer_num != value: + self._minimum_layer_num = value + if self._minimum_layer_num < 0: + self._minimum_layer_num = 0 + if self._minimum_layer_num > self._current_layer_num: + self._minimum_layer_num = self._current_layer_num + + self._startUpdateTopLayers() + + self.currentLayerNumChanged.emit() + def setLayerViewType(self, layer_view_type): self._layer_view_type = layer_view_type self.currentLayerNumChanged.emit() diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index ad02aade19..dd0b311c6d 100644 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -13,13 +13,33 @@ Item width: UM.Theme.getSize("button").width height: UM.Theme.getSize("slider_layerview_size").height + Slider + { + id: slider2 + width: UM.Theme.getSize("slider_layerview_size").width + height: UM.Theme.getSize("slider_layerview_size").height + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("slider_layerview_margin").width * 0.2 + orientation: Qt.Vertical + minimumValue: 0; + maximumValue: UM.LayerView.numLayers; + stepSize: 1 + + property real pixelsPerStep: ((height - UM.Theme.getSize("slider_handle").height) / (maximumValue - minimumValue)) * stepSize; + + value: UM.LayerView.minimumLayer + onValueChanged: UM.LayerView.setMinimumLayer(value) + + style: UM.Theme.styles.slider; + } + Slider { id: slider width: UM.Theme.getSize("slider_layerview_size").width height: UM.Theme.getSize("slider_layerview_size").height anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("slider_layerview_margin").width/2 + anchors.leftMargin: UM.Theme.getSize("slider_layerview_margin").width * 0.8 orientation: Qt.Vertical minimumValue: 0; maximumValue: UM.LayerView.numLayers; diff --git a/plugins/LayerView/LayerViewProxy.py b/plugins/LayerView/LayerViewProxy.py index c7a0d4a918..28acdce4a5 100644 --- a/plugins/LayerView/LayerViewProxy.py +++ b/plugins/LayerView/LayerViewProxy.py @@ -35,6 +35,12 @@ class LayerViewProxy(QObject): if type(active_view) == LayerView.LayerView.LayerView: return active_view.getCurrentLayer() + @pyqtProperty(int, notify = currentLayerChanged) + def minimumLayer(self): + active_view = self._controller.getActiveView() + if type(active_view) == LayerView.LayerView.LayerView: + return active_view.getMinimumLayer() + busyChanged = pyqtSignal() @pyqtProperty(bool, notify = busyChanged) def busy(self): @@ -50,6 +56,12 @@ class LayerViewProxy(QObject): if type(active_view) == LayerView.LayerView.LayerView: active_view.setLayer(layer_num) + @pyqtSlot(int) + def setMinimumLayer(self, layer_num): + active_view = self._controller.getActiveView() + if type(active_view) == LayerView.LayerView.LayerView: + active_view.setMinimumLayer(layer_num) + @pyqtSlot(int) def setLayerViewType(self, layer_view_type): active_view = self._controller.getActiveView()