diff --git a/cura/API/Account.py b/cura/API/Account.py index c6027acdb5..d126a52d60 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -115,15 +115,15 @@ class Account(QObject): self._update_timer.setSingleShot(True) self._update_timer.timeout.connect(self.sync) - self._sync_services: Dict[str, int] = {} """contains entries "service_name" : SyncState""" - self.syncRequested.connect(self._updatePermissions) + self._sync_services: Dict[str, int] = {} def initialize(self) -> None: self._authorization_service.initialize(self._application.getPreferences()) self._authorization_service.onAuthStateChanged.connect(self._onLoginStateChanged) self._authorization_service.onAuthenticationError.connect(self._onLoginStateChanged) self._authorization_service.accessTokenChanged.connect(self._onAccessTokenChanged) + self._authorization_service.accessTokenChanged.connect(self._updatePermissions) self._authorization_service.loadAuthDataFromPreferences() @pyqtProperty(int, notify=syncStateChanged) diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index d33f0e374a..5a9fa487fc 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -96,7 +96,8 @@ class ThreeMFWriter(MeshWriter): @staticmethod def _convertUMNodeToSavitarNode(um_node, transformation = Matrix(), - exported_settings: Optional[Dict[str, Set[str]]] = None): + exported_settings: Optional[Dict[str, Set[str]]] = None, + center_mesh = False): """Convenience function that converts an Uranium SceneNode object to a SavitarSceneNode :returns: Uranium Scene node. @@ -111,16 +112,20 @@ class ThreeMFWriter(MeshWriter): savitar_node = Savitar.SceneNode() savitar_node.setName(um_node.getName()) - node_matrix = Matrix() mesh_data = um_node.getMeshData() - # compensate for original center position, if object(s) is/are not around its zero position - if mesh_data is not None: - extents = mesh_data.getExtents() - if extents is not None: - # We use a different coordinate space while writing, so flip Z and Y - center_vector = Vector(extents.center.x, extents.center.z, extents.center.y) - node_matrix.setByTranslation(center_vector) - node_matrix.multiply(um_node.getLocalTransformation()) + + if center_mesh: + node_matrix = Matrix() + # compensate for original center position, if object(s) is/are not around its zero position + if mesh_data is not None: + extents = mesh_data.getExtents() + if extents is not None: + # We use a different coordinate space while writing, so flip Z and Y + center_vector = Vector(extents.center.x, extents.center.y, extents.center.z) + node_matrix.setByTranslation(center_vector) + node_matrix.multiply(um_node.getLocalTransformation()) + else: + node_matrix = um_node.getLocalTransformation() matrix_string = ThreeMFWriter._convertMatrixToString(node_matrix.preMultiply(transformation)) @@ -147,7 +152,7 @@ class ThreeMFWriter(MeshWriter): for key in changed_setting_keys: savitar_node.setSetting("cura:" + key, str(stack.getProperty(key, "value"))) else: - # We want to export only the specified settings + # We want to export only the specified settings if um_node.getName() in exported_settings: model_exported_settings = exported_settings[um_node.getName()] @@ -283,7 +288,8 @@ class ThreeMFWriter(MeshWriter): for root_child in node.getChildren(): savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(root_child, transformation_matrix, - exported_model_settings) + exported_model_settings, + center_mesh = True) if savitar_node: savitar_scene.addSceneNode(savitar_node) else: @@ -442,7 +448,7 @@ class ThreeMFWriter(MeshWriter): def sceneNodesToString(scene_nodes: [SceneNode]) -> str: savitar_scene = Savitar.Scene() for scene_node in scene_nodes: - savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(scene_node) + savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(scene_node, center_mesh = True) savitar_scene.addSceneNode(savitar_node) parser = Savitar.ThreeMFParser() scene_string = parser.sceneToString(savitar_scene) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index c73dee2fb0..dd7987bc42 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -544,7 +544,7 @@ class CuraEngineBackend(QObject, Backend): if job.getResult() == StartJobResult.ObjectsWithDisabledExtruder: self._error_message = Message(catalog.i18nc("@info:status", - "Unable to slice because there are objects associated with disabled Extruder %s.") % job.getMessage(), + "Unable to slice because there are objects associated with disabled Extruder %s.") % job.getAssociatedDisabledExtruders(), title = catalog.i18nc("@info:title", "Unable to slice"), message_type = Message.MessageType.WARNING) self._error_message.show() diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 3a1d7ce431..9caadbdff6 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -146,6 +146,7 @@ class StartSliceJob(Job): self._slice_message: Arcus.PythonMessage = slice_message self._is_cancelled: bool = False self._build_plate_number: Optional[int] = None + self._associated_disabled_extruders: Optional[str] = None # cache for all setting values from all stacks (global & extruder) for the current machine self._all_extruders_settings: Optional[Dict[str, Any]] = None @@ -153,6 +154,9 @@ class StartSliceJob(Job): def getSliceMessage(self) -> Arcus.PythonMessage: return self._slice_message + def getAssociatedDisabledExtruders(self) -> Optional[str]: + return self._associated_disabled_extruders + def setBuildPlate(self, build_plate_number: int) -> None: self._build_plate_number = build_plate_number @@ -334,7 +338,7 @@ class StartSliceJob(Job): if has_model_with_disabled_extruders: self.setResult(StartJobResult.ObjectsWithDisabledExtruder) associated_disabled_extruders = {p + 1 for p in associated_disabled_extruders} - self.setMessage(", ".join(map(str, sorted(associated_disabled_extruders)))) + self._associated_disabled_extruders = ", ".join(map(str, sorted(associated_disabled_extruders))) return # There are cases when there is nothing to slice. This can happen due to one at a time slicing not being diff --git a/requirements.txt b/requirements.txt index 3024096234..344a0156d8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -206,25 +206,25 @@ chardet==3.0.4 \ idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c -attrs==21.2.0 \ - --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ - --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb +attrs==21.3.0 \ + --hash=sha256:8f7335278dedd26b58c38e006338242cc0977f06d51579b2b8b87b9b33bff66c \ + --hash=sha256:50f3c9b216dc9021042f71b392859a773b904ce1a029077f58f6598272432045 requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 # twisted -Twisted==23.8.0 \ - --hash=sha256:3c73360add17336a622c0d811c2a2ce29866b6e59b1125fd6509b17252098a24 \ - --hash=sha256:b8bdba145de120ffb36c20e6e071cce984e89fba798611ed0704216fb7f884cd +Twisted==21.2.0 \ + --hash=sha256:77544a8945cf69b98d2946689bbe0c75de7d145cdf11f391dd487eae8fc95a12 \ + --hash=sha256:aab38085ea6cda5b378b519a0ec99986874921ee8881318626b0a3414bb2631e constantly==15.1.0 \ --hash=sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35 \ --hash=sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d hyperlink==21.0.0 \ --hash=sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b \ --hash=sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4 -incremental==21.3.0 \ - --hash=sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57 \ - --hash=sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321 +incremental==22.10.0 \ + --hash=sha256:b864a1f30885ee72c5ac2835a761b8fe8aa9c28b9395cacf27286602688d3e51 \ + --hash=sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0 zope.interface==5.4.0 \ --hash=sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3 \ --hash=sha256:3c02411a3b62668200910090a0dff17c0b25aaa36145082a5a6adf08fa281e54 \ diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 26e6a0060c..c76617ec17 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6208,6 +6208,7 @@ "type": "bool", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false, "children": @@ -6220,6 +6221,7 @@ "value": "raft_remove_inside_corners", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_base_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -6231,6 +6233,7 @@ "value": "raft_remove_inside_corners", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_interface_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -6242,6 +6245,7 @@ "value": "raft_remove_inside_corners", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_surface_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false } @@ -6845,7 +6849,7 @@ "label": "Prime Tower Type", "description": "How to generate the prime tower: