diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index b9208ad1c0..c1a62c872b 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -520,6 +520,15 @@ class BuildVolume(SceneNode): def _getSettingFromAdhesionExtruder(self, setting_key, property = "value"): return self._getSettingFromExtruder(setting_key, "adhesion_extruder_nr", property) + ## Private convenience function to get a setting from every extruder. + # + # For single extrusion machines, this gets the setting from the global + # stack. + # + # \return A sequence of setting values, one for each extruder. + def _getSettingFromAllExtruders(self, setting_key, property = "value"): + return ExtruderManager.getInstance().getAllExtruderSettings(setting_key, property) + ## Private convenience function to get a setting from the support infill # extruder. # @@ -602,10 +611,12 @@ class BuildVolume(SceneNode): farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("ooze_shield_dist", "value")) move_from_wall_radius = 0 # Moves that start from outer wall. - if self._getSettingFromAdhesionExtruder("infill_wipe_dist"): - move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("infill_wipe_dist")) - if self._getSettingFromAdhesionExtruder("travel_avoid_distance") and self._getSettingFromAdhesionExtruder("travel_avoid_other_parts"): - move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("travel_avoid_distance")) + move_from_wall_radius = max(move_from_wall_radius, max(self._getSettingFromAllExtruders("infill_wipe_dist"))) + avoid_enabled_per_extruder = self._getSettingFromAllExtruders(("travel_avoid_other_parts")) + avoid_distance_per_extruder = self._getSettingFromAllExtruders("travel_avoid_distance") + for index, avoid_other_parts_enabled in enumerate(avoid_enabled_per_extruder): #For each extruder (or just global). + if avoid_other_parts_enabled: + move_from_wall_radius = max(move_from_wall_radius, avoid_distance_per_extruder[index]) #Index of the same extruder. #Now combine our different pieces of data to get the final border size. #Support expansion is added to the bed adhesion, since the bed adhesion goes around support. diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 0236f158aa..b127f6575d 100644 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -268,18 +268,22 @@ class ExtruderManager(QObject): container_registry.addContainer(container_stack) def getAllExtruderValues(self, setting_key): + return self.getAllExtruderSettings(setting_key, "value") + + ## Gets a + def getAllExtruderSettings(self, setting_key, property): global_container_stack = UM.Application.getInstance().getGlobalContainerStack() - multi_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1 - if not multi_extrusion: - return [global_container_stack.getProperty(setting_key, "value")] + if global_container_stack.getProperty("machine_extruder_count", "value") <= 1: + return [global_container_stack.getProperty(setting_key, property)] result = [] for index in self.extruderIds: extruder_stack_id = self.extruderIds[str(index)] - stack = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id=extruder_stack_id)[0] - result.append(stack.getProperty(setting_key, "value")) + stack = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0] + result.append(stack.getProperty(setting_key, property)) return result + ## Removes the container stack and user profile for the extruders for a specific machine. # # \param machine_id The machine to remove the extruders for. diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 909ad2f4d6..b90c23ac87 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -248,7 +248,6 @@ class MachineManager(QObject): def _onActiveExtruderStackChanged(self): self.blurSettings.emit() # Ensure no-one has focus. - old_active_container_stack = self._active_container_stack if self._active_container_stack and self._active_container_stack != self._global_container_stack: diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py index d859e85343..34b6351144 100644 --- a/cura/Settings/MachineNameValidator.py +++ b/cura/Settings/MachineNameValidator.py @@ -28,7 +28,7 @@ class MachineNameValidator(QObject): # special character, and that up to [machine_name_max_length / 12] times. maximum_special_characters = int(machine_name_max_length / 12) unescaped = r"[a-zA-Z0-9_\-\.\/]" - self.machine_name_regex = r"((" + unescaped + "){0,12}|.){0," + str(maximum_special_characters) + r"}" + self.machine_name_regex = r"^((" + unescaped + "){0,12}|.){0," + str(maximum_special_characters) + r"}$" validationChanged = pyqtSignal() @@ -56,14 +56,11 @@ class MachineNameValidator(QObject): def updateValidation(self, new_name): is_valid = self.validate(new_name, 0) if is_valid == QValidator.Acceptable: - print("VALID") self.validation_regex = "^.*$" #Matches anything. else: - print("BROKEN!") self.validation_regex = "a^" #Never matches (unless you manage to get "a" before the start of the string... good luck). self.validationChanged.emit() @pyqtProperty("QRegExp", notify=validationChanged) def machineNameRegex(self): - print(self.machine_name_regex) return QRegExp(self.machine_name_regex) \ No newline at end of file diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 8be8751d68..ff3c7eb943 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -154,6 +154,7 @@ "travel_avoid_distance": { "value": "3" }, "wall_0_inset": { "value": "0" }, "wall_line_width_x": { "value": "round(line_width * 0.3 / 0.35, 2)" }, - "wall_thickness": { "value": "1" } + "wall_thickness": { "value": "1" }, + "xy_offset": { "value": "-0.14" } } } diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 59e4848851..5c56abcc12 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -539,7 +539,7 @@ UM.MainWindow target: Cura.MachineManager onBlurSettings: { - contentItem.focus = true + forceActiveFocus() } } diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index 78553bb37f..e6ddef7979 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -251,6 +251,8 @@ UM.ManagementPage { id: renameDialog; object: base.currentItem && base.currentItem.name ? base.currentItem.name : ""; + property var machine_name_validator: Cura.MachineNameValidator { } + validName: renameDialog.newName.match(renameDialog.machine_name_validator.machineNameRegex) != null; onAccepted: { Cura.MachineManager.renameMachine(base.currentItem.id, newName.trim());