From d9ad54cd0d5a63545a97b29b332131e37b19b85e Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 8 Jun 2015 16:31:38 +0200 Subject: [PATCH] Rescale the current layer number based on the maximum layer This makes sure we still have the top layer selected when we receive new data. Contributes to Asana issue 34806173176751 --- plugins/LayerView/LayerView.py | 16 ++++++++++------ plugins/LayerView/LayerView.qml | 1 + 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py index a7caca6a4f..7f8c04986d 100644 --- a/plugins/LayerView/LayerView.py +++ b/plugins/LayerView/LayerView.py @@ -18,10 +18,10 @@ class LayerView(View): self._material = None self._num_layers = 0 self._layer_percentage = 0 # what percentage of layers need to be shown (SLider gives value between 0 - 100) - self._current_layer_num = 0 self._proxy = LayerViewProxy.LayerViewProxy() self._controller.getScene().sceneChanged.connect(self._onSceneChanged) self._max_layers = 10 + self._current_layer_num = 10 def getCurrentLayer(self): return self._current_layer_num @@ -87,7 +87,7 @@ class LayerView(View): renderer.setRenderSelection(False) self._old_max_layers = self._max_layers ## Recalculate num max layers - self._max_layers = 0 + new_max_layers = 0 for node in DepthFirstIterator(scene.getRoot()): if not node.render(renderer): if node.getMeshData() and node.isVisible(): @@ -95,11 +95,15 @@ class LayerView(View): layer_data = node.getMeshData().layerData except AttributeError: continue - if self._max_layers < len(layer_data.getLayers()): - self._max_layers = len(layer_data.getLayers()) - - if self._max_layers != self._old_max_layers: + if new_max_layers < len(layer_data.getLayers()): + new_max_layers = len(layer_data.getLayers()) + + if new_max_layers > 0 and new_max_layers != self._old_max_layers: + self._max_layers = new_max_layers self.maxLayersChanged.emit() + + # This makes sure we update the current layer + self.setLayer(int(self._max_layers * (self._current_layer_num / self._old_max_layers))) maxLayersChanged = Signal() diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index d8a95dff47..f1d78d78f9 100644 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -21,6 +21,7 @@ Item orientation: Qt.Vertical minimumValue: 0; maximumValue: UM.LayerView.numLayers; + stepSize: 1 value: UM.LayerView.currentLayer onValueChanged: UM.LayerView.setCurrentLayer(value)