From a0df6bf54254fa641c84205ad109ea8fd1628a9b Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 6 Mar 2017 14:23:53 +0100 Subject: [PATCH 01/13] Jerry-rig single slider to replace dual slider design --- plugins/LayerView/LayerView.qml | 174 ++++++++++++++++++++++++------- resources/themes/cura/theme.json | 2 +- 2 files changed, 139 insertions(+), 37 deletions(-) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 061aadc4ee..2712c2f59d 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -323,58 +323,160 @@ Item } - Slider + Item { - id: sliderMinimumLayer - width: UM.Theme.getSize("slider_layerview_size").width + id: slider + width: handleSize height: parent.height - 2*UM.Theme.getSize("slider_layerview_margin").height anchors.top: parent.top anchors.topMargin: UM.Theme.getSize("slider_layerview_margin").height anchors.right: layerViewMenu.right - anchors.rightMargin: UM.Theme.getSize("slider_layerview_margin").width * 0.8 - orientation: Qt.Vertical - minimumValue: 0; - maximumValue: UM.LayerView.numLayers-1; - stepSize: 1 + anchors.rightMargin: UM.Theme.getSize("slider_layerview_margin").width - property real pixelsPerStep: ((height - UM.Theme.getSize("slider_handle").height) / (maximumValue - minimumValue)) * stepSize; + property real handleSize: UM.Theme.getSize("slider_handle").width + property real handleRadius: handleSize / 2 + property real minimumRangeHandleSize: UM.Theme.getSize("slider_handle").width / 2 + property real trackThickness: UM.Theme.getSize("slider_groove").width + property real trackRadius: trackThickness / 2 + property real trackBorderWidth: UM.Theme.getSize("default_lining").width + property color upperHandleColor: UM.Theme.getColor("slider_handle") + property color lowerHandleColor: UM.Theme.getColor("slider_handle") + property color rangeHandleColor: UM.Theme.getColor("slider_groove_fill") + property color trackColor: UM.Theme.getColor("slider_groove") + property color trackBorderColor: UM.Theme.getColor("slider_groove_border") - value: UM.LayerView.minimumLayer - onValueChanged: { - UM.LayerView.setMinimumLayer(value) - if (value > UM.LayerView.currentLayer) { - UM.LayerView.setCurrentLayer(value); + property real to: UM.LayerView.numLayers + property real from: 0 + property real minimumRange: 0 + property bool roundValues: true + + property real upper: + { + var result = upperHandle.y / (height - (2 * handleSize + minimumRangeHandleSize)); + result = to + result * (from - (to - minimumRange)); + result = roundValues ? Math.round(result) | 0 : result; + return result; + } + property real lower: + { + var result = (lowerHandle.y - (handleSize + minimumRangeHandleSize)) / (height - (2 * handleSize + minimumRangeHandleSize)); + result = to - minimumRange + result * (from - (to - minimumRange)); + result = roundValues ? Math.round(result) : result; + return result; + } + property real range: upper - lower + property var activeHandle: upperHandle + + onLowerChanged: + { + UM.LayerView.setMinimumLayer(lower) + } + onUpperChanged: + { + UM.LayerView.setCurrentLayer(upper); + } + + Rectangle { + width: parent.trackThickness + height: parent.height - parent.handleSize + radius: parent.trackRadius + anchors.centerIn: parent + color: parent.trackColor + border.width: parent.trackBorderWidth; + border.color: parent.trackBorderColor; + } + + Item { + id: rangeHandle + y: upperHandle.y + upperHandle.height + width: parent.handleSize + height: parent.minimumRangeHandleSize + anchors.horizontalCenter: parent.horizontalCenter + property real value: parent.upper + + Rectangle { + anchors.centerIn: parent + width: parent.parent.trackThickness - 2 * parent.parent.trackBorderWidth + height: parent.height + parent.parent.handleSize + color: parent.parent.rangeHandleColor + } + + MouseArea { + anchors.fill: parent + + drag.target: parent + drag.axis: Drag.YAxis + drag.minimumY: upperHandle.height + drag.maximumY: parent.parent.height - (parent.height + lowerHandle.height) + + onPressed: parent.parent.activeHandle = rangeHandle + onPositionChanged: + { + upperHandle.y = parent.y - upperHandle.height + lowerHandle.y = parent.y + parent.height + } } } - style: UM.Theme.styles.slider; - } + Rectangle { + id: upperHandle + y: parent.height - (parent.minimumRangeHandleSize + 2 * parent.handleSize) + width: parent.handleSize + height: parent.handleSize + anchors.horizontalCenter: parent.horizontalCenter + radius: parent.handleRadius + color: parent.upperHandleColor + property real value: parent.upper - Slider - { - id: slider - width: UM.Theme.getSize("slider_layerview_size").width - height: parent.height - 2*UM.Theme.getSize("slider_layerview_margin").height //UM.Theme.getSize("slider_layerview_size").height - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("slider_layerview_margin").height - anchors.right: layerViewMenu.right - anchors.rightMargin: UM.Theme.getSize("slider_layerview_margin").width * 0.2 - orientation: Qt.Vertical - minimumValue: 0; - maximumValue: UM.LayerView.numLayers; - stepSize: 1 + MouseArea { + anchors.fill: parent - property real pixelsPerStep: ((height - UM.Theme.getSize("slider_handle").height) / (maximumValue - minimumValue)) * stepSize; + drag.target: parent + drag.axis: Drag.YAxis + drag.minimumY: 0 + drag.maximumY: parent.parent.height - (2 * parent.parent.handleSize + parent.parent.minimumRangeHandleSize) - value: UM.LayerView.currentLayer - onValueChanged: { - UM.LayerView.setCurrentLayer(value); - if (value < UM.LayerView.minimumLayer) { - UM.LayerView.setMinimumLayer(value); + onPressed: parent.parent.activeHandle = upperHandle + onPositionChanged: + { + if(lowerHandle.y - (upperHandle.y + upperHandle.height) < parent.parent.minimumRangeHandleSize) + { + lowerHandle.y = upperHandle.y + upperHandle.height + parent.parent.minimumRangeHandleSize; + } + rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height); } } + } - style: UM.Theme.styles.slider; + Rectangle { + id: lowerHandle + y: parent.height - parent.handleSize + width: parent.handleSize + height: parent.handleSize + anchors.horizontalCenter: parent.horizontalCenter + radius: parent.handleRadius + color: parent.lowerHandleColor + property real value: parent.lower + + MouseArea { + anchors.fill: parent + + drag.target: parent + drag.axis: Drag.YAxis + drag.minimumY: upperHandle.height + parent.parent.minimumRangeHandleSize + drag.maximumY: parent.parent.height - parent.height + + onPressed: parent.parent.activeHandle = lowerHandle + onPositionChanged: + { + if(lowerHandle.y - (upperHandle.y + upperHandle.height) < parent.parent.minimumRangeHandleSize) + { + upperHandle.y = lowerHandle.y - (upperHandle.height + parent.parent.minimumRangeHandleSize); + } + rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height) + } + } + } Rectangle { diff --git a/resources/themes/cura/theme.json b/resources/themes/cura/theme.json index bd3fbb6dc6..fa4bf2ee92 100755 --- a/resources/themes/cura/theme.json +++ b/resources/themes/cura/theme.json @@ -292,7 +292,7 @@ "slider_handle": [1.5, 1.5], "slider_layerview_size": [1.0, 22.0], "slider_layerview_background": [4.0, 0.0], - "slider_layerview_margin": [3.0, 1.0], + "slider_layerview_margin": [1.0, 1.0], "layerview_menu_size": [16.5, 21.0], "layerview_menu_size_compatibility": [22, 23.0], From 694da25bb7fe2359e0a7609d20d187b73624c7fa Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 6 Mar 2017 14:35:36 +0100 Subject: [PATCH 02/13] Show proper values of the active handle of the slider --- plugins/LayerView/LayerView.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 2712c2f59d..ad2a27fb0b 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -481,7 +481,7 @@ Item Rectangle { x: parent.width + UM.Theme.getSize("slider_layerview_background").width / 2; - y: parent.height - (parent.value * parent.pixelsPerStep) - UM.Theme.getSize("slider_handle").height * 1.25; + y: slider.activeHandle.y + slider.activeHandle.height / 2 - valueLabel.height / 2; height: UM.Theme.getSize("slider_handle").height + UM.Theme.getSize("default_margin").height width: valueLabel.width + UM.Theme.getSize("default_margin").width @@ -497,7 +497,7 @@ Item { id: valueLabel property string maxValue: slider.maximumValue + 1 - text: slider.value + 1 + text: slider.activeHandle.value + 1 horizontalAlignment: TextInput.AlignRight; onEditingFinished: { From a664ee88b7aed9bb03848785cd69b11e292bfc82 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 6 Mar 2017 16:01:00 +0100 Subject: [PATCH 03/13] Fix setting upper value --- plugins/LayerView/LayerView.qml | 79 ++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 16 deletions(-) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index ad2a27fb0b..7fabdd07bc 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -345,35 +345,67 @@ Item property color trackColor: UM.Theme.getColor("slider_groove") property color trackBorderColor: UM.Theme.getColor("slider_groove_border") - property real to: UM.LayerView.numLayers - property real from: 0 + property real maximumValue: UM.LayerView.numLayers + property real minimumValue: 0 property real minimumRange: 0 property bool roundValues: true - property real upper: + function getUpperValueFromHandle() { var result = upperHandle.y / (height - (2 * handleSize + minimumRangeHandleSize)); - result = to + result * (from - (to - minimumRange)); + result = maximumValue + result * (minimumValue - (maximumValue - minimumRange)); result = roundValues ? Math.round(result) | 0 : result; return result; } - property real lower: + function getLowerValueFromHandle() { var result = (lowerHandle.y - (handleSize + minimumRangeHandleSize)) / (height - (2 * handleSize + minimumRangeHandleSize)); - result = to - minimumRange + result * (from - (to - minimumRange)); + result = maximumValue - minimumRange + result * (minimumValue - (maximumValue - minimumRange)); result = roundValues ? Math.round(result) : result; return result; } - property real range: upper - lower property var activeHandle: upperHandle - onLowerChanged: + function setLowerValue(value) { - UM.LayerView.setMinimumLayer(lower) + } - onUpperChanged: + + function setUpperValue(value) { - UM.LayerView.setCurrentLayer(upper); + print("!!!!!!", value) + + var value = (value - maximumValue) / (minimumValue - maximumValue); + print("a ", value) + var new_upper_y = Math.round(value * (height - (2 * handleSize + minimumRangeHandleSize))); + print("b ", new_upper_y, upperHandle.y) + var new_lower = lowerHandle.value + if(UM.LayerView.currentLayer - lowerHandle.value < minimumRange) + { + new_lower = UM.LayerView.currentLayer - minimumRange + } else if(activeHandle == rangeHandle) + { + new_lower = UM.LayerView.currentLayer - (upperHandle.value - lowerHandle.value) + } + new_lower = Math.max(minimumValue, new_lower) + + if(new_upper_y != upperHandle.y) + { + upperHandle.y = new_upper_y + } + if(new_lower != lowerHandle.value) + { + value = (new_lower - maximumValue) / (minimumValue - maximumValue) + lowerHandle.y = Math.round((handleSize + minimumRangeHandleSize) + value * (height - (2 * handleSize + minimumRangeHandleSize))) + } + rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height); + } + + Connections + { + target: UM.LayerView + onMinimumLayerChanged: slider.setLowerValue(UM.LayerView.minimumLayer) + onCurrentLayerChanged: slider.setUpperValue(UM.LayerView.currentLayer) } Rectangle { @@ -392,7 +424,7 @@ Item width: parent.handleSize height: parent.minimumRangeHandleSize anchors.horizontalCenter: parent.horizontalCenter - property real value: parent.upper + property real value: UM.LayerView.currentLayer Rectangle { anchors.centerIn: parent @@ -414,6 +446,9 @@ Item { upperHandle.y = parent.y - upperHandle.height lowerHandle.y = parent.y + parent.height + + UM.LayerView.setCurrentLayer(slider.getUpperValueFromHandle()); + UM.LayerView.setMinimumLayer(slider.getLowerValueFromHandle()); } } } @@ -426,7 +461,7 @@ Item anchors.horizontalCenter: parent.horizontalCenter radius: parent.handleRadius color: parent.upperHandleColor - property real value: parent.upper + property real value: UM.LayerView.currentLayer MouseArea { anchors.fill: parent @@ -444,8 +479,14 @@ Item lowerHandle.y = upperHandle.y + upperHandle.height + parent.parent.minimumRangeHandleSize; } rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height); + + UM.LayerView.setCurrentLayer(slider.getUpperValueFromHandle()); } } + function setValue(value) + { + UM.LayerView.setCurrentLayer(value); + } } Rectangle { @@ -456,7 +497,7 @@ Item anchors.horizontalCenter: parent.horizontalCenter radius: parent.handleRadius color: parent.lowerHandleColor - property real value: parent.lower + property real value: UM.LayerView.minimumLayer MouseArea { anchors.fill: parent @@ -474,14 +515,20 @@ Item upperHandle.y = lowerHandle.y - (upperHandle.height + parent.parent.minimumRangeHandleSize); } rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height) + + UM.LayerView.setMinimumLayer(slider.getLowerValueFromHandle()); } } + function setValue(value) + { + UM.LayerView.setMinimumLayer(value); + } } Rectangle { x: parent.width + UM.Theme.getSize("slider_layerview_background").width / 2; - y: slider.activeHandle.y + slider.activeHandle.height / 2 - valueLabel.height / 2; + y: Math.floor(slider.activeHandle.y + slider.activeHandle.height / 2 - valueLabel.height / 2); height: UM.Theme.getSize("slider_handle").height + UM.Theme.getSize("default_margin").height width: valueLabel.width + UM.Theme.getSize("default_margin").width @@ -507,7 +554,7 @@ Item cursorPosition = 0; if(valueLabel.text != '') { - slider.value = valueLabel.text - 1; + slider.activeHandle.setValue(valueLabel.text - 1); } } validator: IntValidator { bottom: 1; top: slider.maximumValue + 1; } From a6bc2b07f8836dc436d1623759fa2a10c4a4a201 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 6 Mar 2017 16:35:00 +0100 Subject: [PATCH 04/13] Fix setting lower value --- plugins/LayerView/LayerView.py | 6 +++++ plugins/LayerView/LayerView.qml | 44 ++++++++++++++------------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py index da58c526fe..390c2dcc7d 100755 --- a/plugins/LayerView/LayerView.py +++ b/plugins/LayerView/LayerView.py @@ -163,6 +163,8 @@ class LayerView(View): self._current_layer_num = 0 if self._current_layer_num > self._max_layers: self._current_layer_num = self._max_layers + if self._current_layer_num < self._minimum_layer_num: + self._minimum_layer_num = self._current_layer_num self._startUpdateTopLayers() @@ -173,6 +175,10 @@ class LayerView(View): self._minimum_layer_num = value if self._minimum_layer_num < 0: self._minimum_layer_num = 0 + if self._minimum_layer_num > self._max_layers: + self._minimum_layer_num = self._max_layers + if self._minimum_layer_num > self._current_layer_num: + self._current_layer_num = self._minimum_layer_num self._startUpdateTopLayers() diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 7fabdd07bc..894c29b454 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -366,41 +366,31 @@ Item } property var activeHandle: upperHandle - function setLowerValue(value) - { - - } - function setUpperValue(value) { - print("!!!!!!", value) - var value = (value - maximumValue) / (minimumValue - maximumValue); - print("a ", value) var new_upper_y = Math.round(value * (height - (2 * handleSize + minimumRangeHandleSize))); - print("b ", new_upper_y, upperHandle.y) - var new_lower = lowerHandle.value - if(UM.LayerView.currentLayer - lowerHandle.value < minimumRange) - { - new_lower = UM.LayerView.currentLayer - minimumRange - } else if(activeHandle == rangeHandle) - { - new_lower = UM.LayerView.currentLayer - (upperHandle.value - lowerHandle.value) - } - new_lower = Math.max(minimumValue, new_lower) if(new_upper_y != upperHandle.y) { - upperHandle.y = new_upper_y - } - if(new_lower != lowerHandle.value) - { - value = (new_lower - maximumValue) / (minimumValue - maximumValue) - lowerHandle.y = Math.round((handleSize + minimumRangeHandleSize) + value * (height - (2 * handleSize + minimumRangeHandleSize))) + upperHandle.y = new_upper_y; } rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height); } + function setLowerValue(value) + { + var value = (value - maximumValue) / (minimumValue - maximumValue); + var new_lower_y = Math.round((handleSize + minimumRangeHandleSize) + value * (height - (2 * handleSize + minimumRangeHandleSize))); + + if(new_lower_y != lowerHandle.y) + { + lowerHandle.y = new_lower_y; + } + rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height); + } + + Connections { target: UM.LayerView @@ -447,8 +437,10 @@ Item upperHandle.y = parent.y - upperHandle.height lowerHandle.y = parent.y + parent.height - UM.LayerView.setCurrentLayer(slider.getUpperValueFromHandle()); - UM.LayerView.setMinimumLayer(slider.getLowerValueFromHandle()); + var upper_value = slider.getUpperValueFromHandle(); + var lower_value = upper_value - (upperHandle.value - lowerHandle.value); + UM.LayerView.setCurrentLayer(upper_value); + UM.LayerView.setMinimumLayer(lower_value); } } } From 0fa32c3c167d6fa7047811b824c7afef5b469495 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 6 Mar 2017 16:48:59 +0100 Subject: [PATCH 05/13] Step by 10 layers with shift key down --- plugins/LayerView/LayerView.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py index 390c2dcc7d..56c02a3a26 100755 --- a/plugins/LayerView/LayerView.py +++ b/plugins/LayerView/LayerView.py @@ -285,13 +285,15 @@ class LayerView(View): def event(self, event): modifiers = QApplication.keyboardModifiers() - ctrl_is_active = modifiers == Qt.ControlModifier + ctrl_is_active = modifiers & Qt.ControlModifier + shift_is_active = modifiers & Qt.ShiftModifier if event.type == Event.KeyPressEvent and ctrl_is_active: + amount = 10 if shift_is_active else 1 if event.key == KeyEvent.UpKey: - self.setLayer(self._current_layer_num + 1) + self.setLayer(self._current_layer_num + amount) return True if event.key == KeyEvent.DownKey: - self.setLayer(self._current_layer_num - 1) + self.setLayer(self._current_layer_num - amount) return True if event.type == Event.ViewActivateEvent: From d0c8b05314f3149bfc6b0f0bb20704385c3eed74 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 6 Mar 2017 17:16:36 +0100 Subject: [PATCH 06/13] Fix setting central value --- plugins/LayerView/LayerView.qml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 894c29b454..31459ae2f8 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -443,6 +443,14 @@ Item UM.LayerView.setMinimumLayer(lower_value); } } + function setValue(value) + { + var range = upperHandle.value - lowerHandle.value; + value = Math.min(value, slider.maximumValue); + value = Math.max(value, slider.minimumValue + range); + UM.LayerView.setCurrentLayer(value); + UM.LayerView.setMinimumLayer(value - range); + } } Rectangle { From af265be9000d7e94f66ed43919742ec24e4ca66f Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 6 Mar 2017 17:27:37 +0100 Subject: [PATCH 07/13] Add up/down key navigation to layernum box --- plugins/LayerView/LayerView.qml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 31459ae2f8..cde1b40373 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -570,6 +570,9 @@ Item font: UM.Theme.getFont("default"); background: Item { } } + + Keys.onUpPressed: slider.activeHandle.setValue(slider.activeHandle.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onDownPressed: slider.activeHandle.setValue(slider.activeHandle.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) } BusyIndicator From 2b49484dc7fdac2d101140e80b20bca4fc1a351d Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 6 Mar 2017 17:46:42 +0100 Subject: [PATCH 08/13] Hide the slider controls when there are no layers (and code cleanup) --- plugins/LayerView/LayerView.qml | 49 ++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index cde1b40373..4fe08ce271 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -350,6 +350,9 @@ Item property real minimumRange: 0 property bool roundValues: true + property var activeHandle: upperHandle + property bool layersVisible: UM.LayerView.layerActivity && Printer.platformActivity ? true : false + function getUpperValueFromHandle() { var result = upperHandle.y / (height - (2 * handleSize + minimumRangeHandleSize)); @@ -357,6 +360,7 @@ Item result = roundValues ? Math.round(result) | 0 : result; return result; } + function getLowerValueFromHandle() { var result = (lowerHandle.y - (handleSize + minimumRangeHandleSize)) / (height - (2 * handleSize + minimumRangeHandleSize)); @@ -364,7 +368,6 @@ Item result = roundValues ? Math.round(result) : result; return result; } - property var activeHandle: upperHandle function setUpperValue(value) { @@ -390,7 +393,6 @@ Item rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height); } - Connections { target: UM.LayerView @@ -414,7 +416,18 @@ Item width: parent.handleSize height: parent.minimumRangeHandleSize anchors.horizontalCenter: parent.horizontalCenter + + visible: slider.layersVisible + property real value: UM.LayerView.currentLayer + function setValue(value) + { + var range = upperHandle.value - lowerHandle.value; + value = Math.min(value, slider.maximumValue); + value = Math.max(value, slider.minimumValue + range); + UM.LayerView.setCurrentLayer(value); + UM.LayerView.setMinimumLayer(value - range); + } Rectangle { anchors.centerIn: parent @@ -443,14 +456,6 @@ Item UM.LayerView.setMinimumLayer(lower_value); } } - function setValue(value) - { - var range = upperHandle.value - lowerHandle.value; - value = Math.min(value, slider.maximumValue); - value = Math.max(value, slider.minimumValue + range); - UM.LayerView.setCurrentLayer(value); - UM.LayerView.setMinimumLayer(value - range); - } } Rectangle { @@ -461,7 +466,14 @@ Item anchors.horizontalCenter: parent.horizontalCenter radius: parent.handleRadius color: parent.upperHandleColor + + visible: slider.layersVisible + property real value: UM.LayerView.currentLayer + function setValue(value) + { + UM.LayerView.setCurrentLayer(value); + } MouseArea { anchors.fill: parent @@ -483,10 +495,6 @@ Item UM.LayerView.setCurrentLayer(slider.getUpperValueFromHandle()); } } - function setValue(value) - { - UM.LayerView.setCurrentLayer(value); - } } Rectangle { @@ -497,7 +505,14 @@ Item anchors.horizontalCenter: parent.horizontalCenter radius: parent.handleRadius color: parent.lowerHandleColor + + visible: slider.layersVisible + property real value: UM.LayerView.minimumLayer + function setValue(value) + { + UM.LayerView.setMinimumLayer(value); + } MouseArea { anchors.fill: parent @@ -519,10 +534,6 @@ Item UM.LayerView.setMinimumLayer(slider.getLowerValueFromHandle()); } } - function setValue(value) - { - UM.LayerView.setMinimumLayer(value); - } } Rectangle @@ -538,7 +549,7 @@ Item border.color: UM.Theme.getColor("slider_groove_border") color: UM.Theme.getColor("tool_panel_background") - visible: UM.LayerView.layerActivity && Printer.platformActivity ? true : false + visible: slider.layersVisible TextField { From 34ac02f5bd339cd6a54d48e998261199a854c1c3 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 6 Mar 2017 18:23:08 +0100 Subject: [PATCH 09/13] Use Pointing Rectangle for layer number indicator --- plugins/LayerView/LayerView.qml | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 4fe08ce271..cb8a27d55d 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -536,21 +536,36 @@ Item } } - Rectangle + UM.PointingRectangle { x: parent.width + UM.Theme.getSize("slider_layerview_background").width / 2; - y: Math.floor(slider.activeHandle.y + slider.activeHandle.height / 2 - valueLabel.height / 2); + y: Math.floor(slider.activeHandle.y + slider.activeHandle.height / 2 - height / 2); - height: UM.Theme.getSize("slider_handle").height + UM.Theme.getSize("default_margin").height + target: Qt.point(0, slider.activeHandle.y + slider.activeHandle.height / 2) + arrowSize: UM.Theme.getSize("default_arrow").width + + height: (Math.floor(UM.Theme.getSize("slider_handle").height + UM.Theme.getSize("default_margin").height) / 2) * 2 // Make sure height has an integer middle so drawing a pointy border is easier width: valueLabel.width + UM.Theme.getSize("default_margin").width Behavior on height { NumberAnimation { duration: 50; } } - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("slider_groove_border") - color: UM.Theme.getColor("tool_panel_background") + color: UM.Theme.getColor("lining"); visible: slider.layersVisible + UM.PointingRectangle + { + color: UM.Theme.getColor("tool_panel_background") + target: Qt.point(0, height / 2 + UM.Theme.getSize("default_lining").width) + arrowSize: UM.Theme.getSize("default_arrow").width + anchors.fill: parent + anchors.margins: UM.Theme.getSize("default_lining").width + + MouseArea //Catch all mouse events (so scene doesnt handle them) + { + anchors.fill: parent + } + } + TextField { id: valueLabel From c06ffe6cae5d7bf03e4e3f3bbd143c48d3015d70 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 7 Mar 2017 11:55:29 +0100 Subject: [PATCH 10/13] Moved auth state changed check to first thing set auth checks This should contribute to the windows authentication issues. Most windows devices seemed to get all the auth state messages twice. --- plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 9f0a8b20f5..b89ed58f18 100644 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -327,6 +327,9 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): ## Set the authentication state. # \param auth_state \type{AuthState} Enum value representing the new auth state def setAuthenticationState(self, auth_state): + if auth_state == self._authentication_state: + return # Nothing to do here. + if auth_state == AuthState.AuthenticationRequested: Logger.log("d", "Authentication state changed to authentication requested.") self.setAcceptsCommands(False) @@ -367,9 +370,8 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): self._authentication_timer.stop() self._authentication_counter = 0 - if auth_state != self._authentication_state: - self._authentication_state = auth_state - self.authenticationStateChanged.emit() + self._authentication_state = auth_state + self.authenticationStateChanged.emit() authenticationStateChanged = pyqtSignal() From 0abf4550842ede93f2df11ceb7dca8a0d5c173e2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 7 Mar 2017 12:41:53 +0100 Subject: [PATCH 11/13] Don't always offset with 0.5mm This is no longer needed, since before this happens we would already get an error with calculating the 3D model. Perhaps we should introduce a minkowski offset there but performing Minkowski on a 3D model is fairly expensive. --- cura/ConvexHullDecorator.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cura/ConvexHullDecorator.py b/cura/ConvexHullDecorator.py index 2b97feec82..0006f7ff6c 100644 --- a/cura/ConvexHullDecorator.py +++ b/cura/ConvexHullDecorator.py @@ -253,14 +253,11 @@ class ConvexHullDecorator(SceneNodeDecorator): ## Offset the convex hull with settings that influence the collision area. # - # This also applies a minimum offset of 0.5mm, because of edge cases due - # to the rounding we apply. - # # \param convex_hull Polygon of the original convex hull. # \return New Polygon instance that is offset with everything that # influences the collision area. def _offsetHull(self, convex_hull): - horizontal_expansion = max(0.5, self._getSettingProperty("xy_offset", "value")) + horizontal_expansion = self._getSettingProperty("xy_offset", "value") expansion_polygon = Polygon(numpy.array([ [-horizontal_expansion, -horizontal_expansion], [-horizontal_expansion, horizontal_expansion], From b25a6423df655e957c9ffed00b574b4f988d8e1b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 7 Mar 2017 12:47:13 +0100 Subject: [PATCH 12/13] Don't offset hull if offset is 0 This might speed things up a bit. --- cura/ConvexHullDecorator.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/cura/ConvexHullDecorator.py b/cura/ConvexHullDecorator.py index 0006f7ff6c..7065b71735 100644 --- a/cura/ConvexHullDecorator.py +++ b/cura/ConvexHullDecorator.py @@ -258,13 +258,16 @@ class ConvexHullDecorator(SceneNodeDecorator): # influences the collision area. def _offsetHull(self, convex_hull): horizontal_expansion = self._getSettingProperty("xy_offset", "value") - expansion_polygon = Polygon(numpy.array([ - [-horizontal_expansion, -horizontal_expansion], - [-horizontal_expansion, horizontal_expansion], - [horizontal_expansion, horizontal_expansion], - [horizontal_expansion, -horizontal_expansion] - ], numpy.float32)) - return convex_hull.getMinkowskiHull(expansion_polygon) + if horizontal_expansion != 0: + expansion_polygon = Polygon(numpy.array([ + [-horizontal_expansion, -horizontal_expansion], + [-horizontal_expansion, horizontal_expansion], + [horizontal_expansion, horizontal_expansion], + [horizontal_expansion, -horizontal_expansion] + ], numpy.float32)) + return convex_hull.getMinkowskiHull(expansion_polygon) + else: + return convex_hull def _onChanged(self, *args): self._raft_thickness = self._build_volume.getRaftThickness() From 3047ff26f18f41d9d5b67c223b93660cac45915b Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Tue, 7 Mar 2017 13:09:30 +0100 Subject: [PATCH 13/13] fix: min warning for skin angle (CURA-3440) --- resources/definitions/fdmprinter.def.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 7f75c8361e..008e332eca 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1325,8 +1325,9 @@ "unit": "°", "type": "float", "minimum_value": "0", - "maximum_value": "90", + "minimum_value_warning": "2", "maximum_value_warning": "45", + "maximum_value": "90", "default_value": 20, "enabled": "expand_upper_skins or expand_lower_skins", "settable_per_mesh": true,