From eb310116aaa2e4d074d9d59d3a8c8bb88c5fb18a Mon Sep 17 00:00:00 2001 From: Vlad Gribinchuk Date: Tue, 9 Oct 2018 10:50:34 +0300 Subject: [PATCH 01/28] JSON settings for "Support Interface Offset" feature --- resources/definitions/fdmprinter.def.json | 44 +++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 305d841175..2d71187be6 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4336,6 +4336,50 @@ } } }, + "support_interface_offset": + { + "label": "Support Interface Offset", + "description": "Amount of offset applied to the support interface polygons.", + "unit": "mm", + "type": "float", + "minimum_value": "0", + "default_value": 0.0, + "limit_to_extruder": "support_interface_extruder_nr", + "enabled": "support_interface_enable and (support_enable or support_tree_enable)", + "settable_per_mesh": false, + "settable_per_extruder": true, + "children": + { + "support_roof_offset": + { + "label": "Support Roof Offset", + "description": "Amount of offset applied to the roofs of the support.", + "unit": "mm", + "type": "float", + "minimum_value": "0", + "default_value": 0.0, + "value": "extruderValue(support_roof_extruder_nr, 'support_interface_offset')", + "limit_to_extruder": "support_roof_extruder_nr", + "enabled": "support_roof_enable and (support_enable or support_tree_enable)", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "support_bottom_offset": + { + "label": "Support Floor Offset", + "description": "Amount of offset applied to the floors of the support.", + "unit": "mm", + "type": "float", + "minimum_value": "0", + "default_value": 0.0, + "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_offset')", + "limit_to_extruder": "support_bottom_extruder_nr", + "enabled": "support_bottom_enable and (support_enable or support_tree_enable)", + "settable_per_mesh": false, + "settable_per_extruder": true + } + } + }, "support_fan_enable": { "label": "Fan Speed Override", From cb24549d7d0caa4f010bb0c26a40e0a8ace84a5e Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 1 Nov 2018 08:29:52 +0100 Subject: [PATCH 02/28] Set CuraApplication display name CURA-5842 --- cura/CuraApplication.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index fc9ba1ebf4..3e9e44149b 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -161,6 +161,7 @@ class CuraApplication(QtApplication): def __init__(self, *args, **kwargs): super().__init__(name = "cura", + app_display_name = "Ultimaker Cura", version = CuraVersion, buildtype = CuraBuildType, is_debug_mode = CuraDebugMode, From ff4dfcf9a6259b477bee7a5685e025df1b6c5b12 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 1 Nov 2018 12:14:49 +0100 Subject: [PATCH 03/28] Make Cura app display name configurable CURA-5842 --- CMakeLists.txt | 1 + cura/CuraApplication.py | 5 +++-- cura/CuraVersion.py.in | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e9bf4b538..deb4e63935 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,7 @@ if(CURA_DEBUGMODE) set(_cura_debugmode "ON") endif() +set(CURA_APP_DISPLAY_NAME "Ultimaker Cura" CACHE STRING "Display name of Cura") set(CURA_VERSION "master" CACHE STRING "Version name of Cura") set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'") set(CURA_SDK_VERSION "" CACHE STRING "SDK version of Cura") diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 3e9e44149b..454c2529dc 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -128,8 +128,9 @@ if TYPE_CHECKING: numpy.seterr(all = "ignore") try: - from cura.CuraVersion import CuraVersion, CuraBuildType, CuraDebugMode, CuraSDKVersion + from cura.CuraVersion import CuraAppDisplayName, CuraVersion, CuraBuildType, CuraDebugMode, CuraSDKVersion except ImportError: + CuraAppDisplayName = "Ultimaker Cura" CuraVersion = "master" # [CodeStyle: Reflecting imported value] CuraBuildType = "" CuraDebugMode = False @@ -161,7 +162,7 @@ class CuraApplication(QtApplication): def __init__(self, *args, **kwargs): super().__init__(name = "cura", - app_display_name = "Ultimaker Cura", + app_display_name = CuraAppDisplayName, version = CuraVersion, buildtype = CuraBuildType, is_debug_mode = CuraDebugMode, diff --git a/cura/CuraVersion.py.in b/cura/CuraVersion.py.in index 226b2183f2..388429bc02 100644 --- a/cura/CuraVersion.py.in +++ b/cura/CuraVersion.py.in @@ -1,6 +1,7 @@ # Copyright (c) 2015 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +CuraAppDisplayName = "@CURA_APP_DISPLAY_NAME@" CuraVersion = "@CURA_VERSION@" CuraBuildType = "@CURA_BUILDTYPE@" CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False From dcad95aab9cfb2ec215dc3cb22467fffff2918b7 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Thu, 1 Nov 2018 12:44:14 +0100 Subject: [PATCH 04/28] Rename Toolbox button to Marketplace. Contributes to CURA-5784. --- resources/qml/MainWindow/MainWindowHeader.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml index 3f088e782f..59ec542e6b 100644 --- a/resources/qml/MainWindow/MainWindowHeader.qml +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -83,7 +83,7 @@ Rectangle } leftPadding: UM.Theme.getSize("default_margin").width rightPadding: UM.Theme.getSize("default_margin").width - text: catalog.i18nc("@action:button", "Toolbox") + text: catalog.i18nc("@action:button", "Marketplace") height: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) color: UM.Theme.getColor("main_window_header_secondary_button_background_active") hoverColor: UM.Theme.getColor("main_window_header_secondary_button_background_hovered") From e61a6e7a5cea0d4aa4812738d485c4dcfca9ec05 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 1 Nov 2018 09:32:23 +0100 Subject: [PATCH 05/28] Fix codestyle --- resources/qml/AddMachineDialog.qml | 35 ++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/resources/qml/AddMachineDialog.qml b/resources/qml/AddMachineDialog.qml index 1b39cdeac2..0df8b891d9 100644 --- a/resources/qml/AddMachineDialog.qml +++ b/resources/qml/AddMachineDialog.qml @@ -25,7 +25,8 @@ UM.Dialog width: minimumWidth height: minimumHeight - flags: { + flags: + { var window_flags = Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint; if (Cura.MachineManager.activeDefinitionId !== "") //Disallow closing the window if we have no active printer yet. You MUST add a printer. { @@ -48,22 +49,28 @@ UM.Dialog function getMachineName() { - return machineList.model.getItem(machineList.currentIndex) != undefined ? machineList.model.getItem(machineList.currentIndex).name : ""; + if (machineList.model.getItem(machineList.currentIndex) != undefined) + { + return machineList.model.getItem(machineList.currentIndex).name; + } + return ""; } function getMachineMetaDataEntry(key) { - var metadata = machineList.model.getItem(machineList.currentIndex) != undefined ? machineList.model.getItem(machineList.currentIndex).metadata : undefined; - if (metadata) + if (machineList.model.getItem(machineList.currentIndex) != undefined) { - return metadata[key]; + return machineList.model.getItem(machineList.currentIndex).metadata[key]; } - return undefined; + return ""; } - Label { + + Label + { id: titleLabel - anchors { + anchors + { top: parent.top left: parent.left topMargin: UM.Theme.getSize("default_margin") @@ -102,7 +109,8 @@ UM.Dialog width: Math.round(parent.width * 0.45) frameVisible: true; - Rectangle { + Rectangle + { parent: viewport anchors.fill: parent color: palette.light @@ -159,11 +167,14 @@ UM.Dialog onClicked: { base.activeCategory = section; - if (machineList.model.getItem(machineList.currentIndex).section != section) { + if (machineList.model.getItem(machineList.currentIndex).section != section) + { // Find the first machine from this section - for(var i = 0; i < machineList.model.rowCount(); i++) { + for(var i = 0; i < machineList.model.rowCount(); i++) + { var item = machineList.model.getItem(i); - if (item.section == section) { + if (item.section == section) + { machineList.currentIndex = i; break; } From 4dc248a63158b5b17bde7c944999b7c1d563989c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 1 Nov 2018 14:43:22 +0100 Subject: [PATCH 06/28] Rename Open Marketplace to just Marketplace Because Open Marketplace has to be translated (the 'open' part) but the Marketplace can just be called marketplace. Contributes to issue 5870. --- resources/qml/Actions.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 161c1db342..892386d9e7 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -421,7 +421,7 @@ Item Action { id: browsePackagesAction - text: catalog.i18nc("@action:menu", "Open Marketplace...") + text: catalog.i18nc("@action:menu", "&Marketplace") iconName: "plugins_browse" } From 90726ecbff305d044dc63e5829134351e3e624f0 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 1 Nov 2018 15:28:08 +0100 Subject: [PATCH 07/28] Fix situation where the setting visibility model could cause a crash. Yay for crash logging --- cura/Machines/Models/SettingVisibilityPresetsModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py index 2702001d8a..79131521f2 100644 --- a/cura/Machines/Models/SettingVisibilityPresetsModel.py +++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py @@ -140,7 +140,7 @@ class SettingVisibilityPresetsModel(QObject): item_to_set = self._active_preset_item if matching_preset_item is None: # The new visibility setup is "custom" should be custom - if self._active_preset_item.presetId == "custom": + if self._active_preset_item is None or self._active_preset_item.presetId == "custom": # We are already in custom, just save the settings self._preferences.setValue("cura/custom_visible_settings", visibility_string) else: From 28526744990580b1f181d2c7afe0726e59b5be13 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 1 Nov 2018 15:50:18 +0100 Subject: [PATCH 08/28] Adjust state of API call It can just be an arbitrary string, as long as it is kept consistent I suppose. Discovered during test of CURA-5784. --- cura/OAuth2/AuthorizationService.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py index 65b31f1ed7..4355891139 100644 --- a/cura/OAuth2/AuthorizationService.py +++ b/cura/OAuth2/AuthorizationService.py @@ -120,7 +120,7 @@ class AuthorizationService: "redirect_uri": self._settings.CALLBACK_URL, "scope": self._settings.CLIENT_SCOPES, "response_type": "code", - "state": "CuraDriveIsAwesome", + "state": "(.Y.)", "code_challenge": challenge_code, "code_challenge_method": "S512" }) From 300d109cfe45cd64665536e0113ade0e12ff0260 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 2 Nov 2018 13:37:57 +0100 Subject: [PATCH 09/28] Set the Z of the machine selector so the tooltip doesn't get hidden CURA-5772 --- plugins/PrepareStage/PrepareMenu.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/PrepareStage/PrepareMenu.qml b/plugins/PrepareStage/PrepareMenu.qml index cdcc1384a2..e8514a9ef9 100644 --- a/plugins/PrepareStage/PrepareMenu.qml +++ b/plugins/PrepareStage/PrepareMenu.qml @@ -45,6 +45,7 @@ Item id: machineSelection width: UM.Theme.getSize("machine_selector_widget").width - configSelection.width height: prepareMenu.height + z: openFileButton.z - 1 } Cura.QuickConfigurationSelector From a0295786b08bb4233f1b88c65c55d771ec6d2f5b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 5 Nov 2018 09:44:41 +0100 Subject: [PATCH 10/28] Remove unused installer.nsi It won't work any more anyway. Please use https://github.com/Ultimaker/cura-build to create an installer for Cura. --- installer.nsi | 156 -------------------------------------------------- 1 file changed, 156 deletions(-) delete mode 100644 installer.nsi diff --git a/installer.nsi b/installer.nsi deleted file mode 100644 index 7516f733a1..0000000000 --- a/installer.nsi +++ /dev/null @@ -1,156 +0,0 @@ -!ifndef VERSION - !define VERSION '15.09.80' -!endif - -; The name of the installer -Name "Cura ${VERSION}" - -; The file to write -OutFile "Cura_${VERSION}.exe" - -; The default installation directory -InstallDir $PROGRAMFILES\Cura_${VERSION} - -; Registry key to check for directory (so if you install again, it will -; overwrite the old one automatically) -InstallDirRegKey HKLM "Software\Cura_${VERSION}" "Install_Dir" - -; Request application privileges for Windows Vista -RequestExecutionLevel admin - -; Set the LZMA compressor to reduce size. -SetCompressor /SOLID lzma -;-------------------------------- - -!include "MUI2.nsh" -!include "Library.nsh" - -; !define MUI_ICON "dist/resources/cura.ico" -!define MUI_BGCOLOR FFFFFF - -; Directory page defines -!define MUI_DIRECTORYPAGE_VERIFYONLEAVE - -; Header -; Don't show the component description box -!define MUI_COMPONENTSPAGE_NODESC - -;Do not leave (Un)Installer page automaticly -!define MUI_FINISHPAGE_NOAUTOCLOSE -!define MUI_UNFINISHPAGE_NOAUTOCLOSE - -;Run Cura after installing -!define MUI_FINISHPAGE_RUN -!define MUI_FINISHPAGE_RUN_TEXT "Start Cura ${VERSION}" -!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink" - -;Add an option to show release notes -!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\plugins\ChangeLogPlugin\changelog.txt" - -; Pages -;!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_COMPONENTS -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES -!insertmacro MUI_UNPAGE_FINISH - -; Languages -!insertmacro MUI_LANGUAGE "English" - -; Reserve Files -!insertmacro MUI_RESERVEFILE_LANGDLL -ReserveFile '${NSISDIR}\Plugins\InstallOptions.dll' - -;-------------------------------- - -; The stuff to install -Section "Cura ${VERSION}" - - SectionIn RO - - ; Set output path to the installation directory. - SetOutPath $INSTDIR - - ; Put file there - File /r "dist\" - - ; Write the installation path into the registry - WriteRegStr HKLM "SOFTWARE\Cura_${VERSION}" "Install_Dir" "$INSTDIR" - - ; Write the uninstall keys for Windows - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cura_${VERSION}" "DisplayName" "Cura ${VERSION}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cura_${VERSION}" "UninstallString" '"$INSTDIR\uninstall.exe"' - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cura_${VERSION}" "NoModify" 1 - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cura_${VERSION}" "NoRepair" 1 - WriteUninstaller "uninstall.exe" - - ; Write start menu entries for all users - SetShellVarContext all - - CreateDirectory "$SMPROGRAMS\Cura ${VERSION}" - CreateShortCut "$SMPROGRAMS\Cura ${VERSION}\Uninstall Cura ${VERSION}.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 - CreateShortCut "$SMPROGRAMS\Cura ${VERSION}\Cura ${VERSION}.lnk" "$INSTDIR\Cura.exe" '' "$INSTDIR\Cura.exe" 0 - -SectionEnd - -Function LaunchLink - ; Write start menu entries for all users - SetShellVarContext all - Exec '"$WINDIR\explorer.exe" "$SMPROGRAMS\Cura ${VERSION}\Cura ${VERSION}.lnk"' -FunctionEnd - -Section "Install Visual Studio 2010 Redistributable" - SetOutPath "$INSTDIR" - File "vcredist_2010_20110908_x86.exe" - - IfSilent +2 - ExecWait '"$INSTDIR\vcredist_2010_20110908_x86.exe" /q /norestart' - -SectionEnd - -Section "Install Arduino Drivers" - ; Set output path to the driver directory. - SetOutPath "$INSTDIR\drivers\" - File /r "drivers\" - - ${If} ${RunningX64} - IfSilent +2 - ExecWait '"$INSTDIR\drivers\dpinst64.exe" /lm' - ${Else} - IfSilent +2 - ExecWait '"$INSTDIR\drivers\dpinst32.exe" /lm' - ${EndIf} -SectionEnd - -Section "Open STL files with Cura" - ${registerExtension} "$INSTDIR\Cura.exe" ".stl" "STL_File" -SectionEnd - -Section /o "Open OBJ files with Cura" - WriteRegStr HKCR .obj "" "Cura OBJ model file" - DeleteRegValue HKCR .obj "Content Type" - WriteRegStr HKCR "Cura OBJ model file\DefaultIcon" "" "$INSTDIR\Cura.exe,0" - WriteRegStr HKCR "Cura OBJ model file\shell" "" "open" - WriteRegStr HKCR "Cura OBJ model file\shell\open\command" "" '"$INSTDIR\Cura.exe" "%1"' -SectionEnd - -;-------------------------------- - -; Uninstaller - -Section "Uninstall" - - ; Remove registry keys - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cura_${VERSION}" - DeleteRegKey HKLM "SOFTWARE\Cura_${VERSION}" - - ; Write start menu entries for all users - SetShellVarContext all - ; Remove directories used - RMDir /r "$SMPROGRAMS\Cura ${VERSION}" - RMDir /r "$INSTDIR" - -SectionEnd From eded0f02974c31e84e0c6dc505f234f68af7ea81 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 5 Nov 2018 11:17:39 +0100 Subject: [PATCH 11/28] Make quality manager also include profiles with same GUID in fallback. This ensures that if a (duplicated) material does not have a generic variant, that the material it was copied from will be added to the fallback list. CURA-5898 --- cura/Machines/MaterialManager.py | 26 ++++++++++++++++++++++++-- cura/Machines/QualityManager.py | 12 +++++++----- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 1a204c020b..cbe1d10656 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -12,6 +12,7 @@ from UM.Application import Application from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Logger import Logger from UM.Settings.ContainerRegistry import ContainerRegistry +from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.SettingFunction import SettingFunction from UM.Util import parseBool @@ -298,7 +299,7 @@ class MaterialManager(QObject): def getRootMaterialIDWithoutDiameter(self, root_material_id: str) -> str: return self._diameter_material_map.get(root_material_id, "") - def getMaterialGroupListByGUID(self, guid: str) -> Optional[list]: + def getMaterialGroupListByGUID(self, guid: str) -> Optional[List[MaterialGroup]]: return self._guid_material_groups_map.get(guid) # @@ -446,6 +447,28 @@ class MaterialManager(QObject): material_diameter, root_material_id) return node + # There are 2 ways to get fallback materials; + # - A fallback by type (@sa getFallbackMaterialIdByMaterialType), which adds the generic version of this material + # - A fallback by GUID; If a material has been duplicated, it should also check if the original materials do have + # a GUID. This should only be done if the material itself does not have a quality just yet. + def getFallBackMaterialIdsByMaterial(self, material: InstanceContainer) -> List[str]: + results = [] # List[str] + + material_groups = self.getMaterialGroupListByGUID(material.getMetaDataEntry("GUID")) + for material_group in material_groups: + if material_group.name != material.getId(): + # If the material in the group is read only, put it at the front of the list (since that is the most + # likely one to get a result) + if material_group.is_read_only: + results.insert(0, material_group.name) + else: + results.append(material_group.name) + + fallback = self.getFallbackMaterialIdByMaterialType(material.getMetaDataEntry("material")) + if fallback is not None: + results.append(fallback) + return results + # # Used by QualityManager. Built-in quality profiles may be based on generic material IDs such as "generic_pla". # For materials such as ultimaker_pla_orange, no quality profiles may be found, so we should fall back to use @@ -602,7 +625,6 @@ class MaterialManager(QObject): container_to_add.setDirty(True) self._container_registry.addContainer(container_to_add) - # if the duplicated material was favorite then the new material should also be added to favorite. if root_material_id in self.getFavorites(): self.addFavorite(new_base_id) diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index ce19624c21..60a6820772 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -259,11 +259,13 @@ class QualityManager(QObject): root_material_id = self._material_manager.getRootMaterialIDWithoutDiameter(root_material_id) root_material_id_list.append(root_material_id) - # Also try to get the fallback material - material_type = extruder.material.getMetaDataEntry("material") - fallback_root_material_id = self._material_manager.getFallbackMaterialIdByMaterialType(material_type) - if fallback_root_material_id: - root_material_id_list.append(fallback_root_material_id) + # Also try to get the fallback materials + fallback_ids = self._material_manager.getFallBackMaterialIdsByMaterial(extruder.material) + + if fallback_ids: + root_material_id_list.extend(fallback_ids) + root_material_id_list = list(set(root_material_id_list)) # Weed out duplicates + # Here we construct a list of nodes we want to look for qualities with the highest priority first. # The use case is that, when we look for qualities for a machine, we first want to search in the following From 412e5977a6c24d7c2553daecf74e57b473af8851 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 5 Nov 2018 11:30:02 +0100 Subject: [PATCH 12/28] Fix type issues --- cura/CuraApplication.py | 2 +- cura/Machines/MaterialManager.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 5323f1b0fa..0610d8da86 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -128,7 +128,7 @@ if TYPE_CHECKING: numpy.seterr(all = "ignore") try: - from cura.CuraVersion import CuraVersion, CuraBuildType, CuraDebugMode, CuraSDKVersion + from cura.CuraVersion import CuraVersion, CuraBuildType, CuraDebugMode, CuraSDKVersion # type: ignore except ImportError: CuraVersion = "master" # [CodeStyle: Reflecting imported value] CuraBuildType = "" diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index cbe1d10656..4f7646b341 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -452,10 +452,10 @@ class MaterialManager(QObject): # - A fallback by GUID; If a material has been duplicated, it should also check if the original materials do have # a GUID. This should only be done if the material itself does not have a quality just yet. def getFallBackMaterialIdsByMaterial(self, material: InstanceContainer) -> List[str]: - results = [] # List[str] + results = [] # type: List[str] material_groups = self.getMaterialGroupListByGUID(material.getMetaDataEntry("GUID")) - for material_group in material_groups: + for material_group in material_groups: # type: ignore if material_group.name != material.getId(): # If the material in the group is read only, put it at the front of the list (since that is the most # likely one to get a result) From 4f10b7809aa1cc97fc73703c9f9f73915edff363 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 5 Nov 2018 12:15:17 +0100 Subject: [PATCH 13/28] Configuration override improvements Contributes to CL-1124 --- .../resources/qml/PrintJobInfoBlock.qml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml index 0fa65ba4c4..d851b684e5 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml @@ -355,7 +355,7 @@ Item { anchors.fill: parent; elide: Text.ElideRight; color: UM.Theme.getColor("text"); - font: UM.Theme.getFont("large_nonbold"); + font: UM.Theme.getFont("medium"); text: { if (!printJob || printJob.configurationChanges.length === 0) { return ""; @@ -398,6 +398,22 @@ Item { bottom: parent.bottom; left: parent.left; } + background: Rectangle { + border { + color: UM.Theme.getColor("monitor_lining_heavy"); + width: UM.Theme.getSize("default_lining").width; + } + color: parent.hovered ? UM.Theme.getColor("monitor_card_background_inactive") : UM.Theme.getColor("monitor_card_background"); + implicitHeight: UM.Theme.getSize("default_margin").height * 3; + implicitWidth: UM.Theme.getSize("default_margin").height * 8; + } + contentItem: Label { + color: UM.Theme.getColor("text"); + font: UM.Theme.getFont("medium"); + horizontalAlignment: Text.AlignHCenter; + text: parent.text; + verticalAlignment: Text.AlignVCenter; + } onClicked: { overrideConfirmationDialog.visible = true; } From 2bb7b352efca961ca3f87a38251084e3a0b83914 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 5 Nov 2018 13:25:47 +0100 Subject: [PATCH 14/28] Hide settings when pre-sliced g-code is loaded CURA-5772 --- resources/qml/PrintSetupSelector.qml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/qml/PrintSetupSelector.qml b/resources/qml/PrintSetupSelector.qml index 987e3ecce9..8232e76a17 100644 --- a/resources/qml/PrintSetupSelector.qml +++ b/resources/qml/PrintSetupSelector.qml @@ -106,10 +106,10 @@ Rectangle model: modesListModel width: Math.round(parent.width * 0.55) height: UM.Theme.getSize("print_setup_mode_toggle").height + visible: !hideSettings anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("thick_margin").width - anchors.top: settingsModeLabel.top ButtonGroup @@ -191,6 +191,8 @@ Rectangle anchors.right: parent.right height: UM.Theme.getSize("print_setup_widget").height + visible: !hideSettings + // We load both of them at once (instead of using a loader) because the advanced sidebar can take // quite some time to load. So in this case we sacrifice memory for speed. SidebarAdvanced From 93afaf64c65f5778c1cafa8d0774ff0d347df8be Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 5 Nov 2018 13:28:14 +0100 Subject: [PATCH 15/28] Strip the old "curaproject" extension from project name CURA-5896 --- cura/PrintInformation.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index 21b57d0806..0d6418d388 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -369,6 +369,11 @@ class PrintInformation(QObject): else: self._base_name = "" + # Strip the old "curaproject" extension from the name + OLD_CURA_PROJECT_EXT = ".curaproject" + if self._base_name.endswith(OLD_CURA_PROJECT_EXT): + self._base_name = self._base_name[:len(self._base_name) - len(OLD_CURA_PROJECT_EXT)] + self._updateJobName() @pyqtProperty(str, fset = setBaseName, notify = baseNameChanged) From 3f1e0cc61013b4626c09a7b8995504f6bb0b2c01 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 5 Nov 2018 14:25:16 +0100 Subject: [PATCH 16/28] Fix delayed convex hull recomputation CURA-5896 If the current tool operation is still active, we need to delay the convex hull recomputation after the tool becomes inactive. --- cura/Scene/ConvexHullDecorator.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py index 52e687832c..39124c5ba3 100644 --- a/cura/Scene/ConvexHullDecorator.py +++ b/cura/Scene/ConvexHullDecorator.py @@ -142,6 +142,12 @@ class ConvexHullDecorator(SceneNodeDecorator): controller = Application.getInstance().getController() root = controller.getScene().getRoot() if self._node is None or controller.isToolOperationActive() or not self.__isDescendant(root, self._node): + # If the tool operation is still active, we need to compute the convex hull later after the controller is + # no longer active. + if controller.isToolOperationActive(): + self.recomputeConvexHullDelayed() + return + if self._convex_hull_node: self._convex_hull_node.setParent(None) self._convex_hull_node = None From 99bac25ab2d7a75ac5e6c9bcceebe75367babc28 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 5 Nov 2018 14:55:22 +0100 Subject: [PATCH 17/28] Show default avatar if user has no avatar picture set CURA-5784 --- resources/qml/Account/AccountDetails.qml | 14 +++++++++++++- resources/qml/Account/AccountWidget.qml | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/resources/qml/Account/AccountDetails.qml b/resources/qml/Account/AccountDetails.qml index c723ca20fb..a288426e0c 100644 --- a/resources/qml/Account/AccountDetails.qml +++ b/resources/qml/Account/AccountDetails.qml @@ -11,6 +11,7 @@ Column { property var profile: null property var loggedIn: false + property var profileImage: "" padding: 2 * UM.Theme.getSize("default_margin").height spacing: 2 * UM.Theme.getSize("default_margin").height @@ -21,7 +22,18 @@ Column width: UM.Theme.getSize("avatar_image").width height: UM.Theme.getSize("avatar_image").height anchors.horizontalCenter: parent.horizontalCenter - source: loggedIn ? profile["profile_image_url"] : UM.Theme.getImage("avatar_no_user") + source: + { + if(loggedIn) + { + if(profileImage) + { + return profileImage + } + return UM.Theme.getImage("avatar_no_user") + } + return UM.Theme.getImage("avatar_no_user") + } outlineColor: loggedIn ? UM.Theme.getColor("account_widget_outline_active") : UM.Theme.getColor("lining") } diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml index cdae457ac8..e37523296f 100644 --- a/resources/qml/Account/AccountWidget.qml +++ b/resources/qml/Account/AccountWidget.qml @@ -25,7 +25,18 @@ Button anchors.verticalCenter: accountWidget.verticalCenter anchors.horizontalCenter: accountWidget.horizontalCenter - source: loggedIn ? profile["profile_image_url"] : UM.Theme.getImage("avatar_no_user") + source: + { + if(loggedIn) + { + if(profile["profile_image_url"]) + { + return profile["profile_image_url"] + } + return UM.Theme.getImage("avatar_no_user") + } + return UM.Theme.getImage("avatar_no_user") + } outlineColor: loggedIn ? UM.Theme.getColor("account_widget_outline_active") : UM.Theme.getColor("lining") } @@ -45,6 +56,7 @@ Button id: panel profile: Cura.API.account.userProfile loggedIn: Cura.API.account.isLoggedIn + profileImage: Cura.API.account.profileImageUrl } background: UM.PointingRectangle From c84aa9cf214c882a0b0cc24667915d7a2cfc18ef Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 5 Nov 2018 17:19:22 +0100 Subject: [PATCH 18/28] Use default font for configuration override Contributes to CL-1124 --- plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml index d851b684e5..8c2c8f9121 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml @@ -296,6 +296,7 @@ Item { verticalCenter: parent.verticalCenter; } color: UM.Theme.getColor("text"); + font: UM.Theme.getFont("default"); text: catalog.i18nc("@label", "Configuration change"); } @@ -355,7 +356,7 @@ Item { anchors.fill: parent; elide: Text.ElideRight; color: UM.Theme.getColor("text"); - font: UM.Theme.getFont("medium"); + font: UM.Theme.getFont("default"); text: { if (!printJob || printJob.configurationChanges.length === 0) { return ""; From 93467dc29f4adeb8e606ee130dc2fa1f1411550d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 5 Nov 2018 17:28:36 +0100 Subject: [PATCH 19/28] Ensure that weeding out the duplicates doesn't mess up the order CURA-5898 --- cura/Machines/QualityManager.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index 60a6820772..fc8262de52 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -1,7 +1,7 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import TYPE_CHECKING, Optional, cast, Dict, List +from typing import TYPE_CHECKING, Optional, cast, Dict, List, Set from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtSlot @@ -264,8 +264,10 @@ class QualityManager(QObject): if fallback_ids: root_material_id_list.extend(fallback_ids) - root_material_id_list = list(set(root_material_id_list)) # Weed out duplicates + # Weed out duplicates while preserving the order. + seen = set() # type: Set[str] + root_material_id_list = [x for x in root_material_id_list if x not in seen and not seen.add(x)] # type: ignore # Here we construct a list of nodes we want to look for qualities with the highest priority first. # The use case is that, when we look for qualities for a machine, we first want to search in the following From ee2a34d64792e40d208cff62690ef56ffe4481a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udio=20=27Patola=27=20Sampaio?= Date: Tue, 6 Nov 2018 04:44:05 -0200 Subject: [PATCH 20/28] Updated pt_BR strings for 3.6 --- resources/i18n/pt_BR/cura.po | 52 ++++++++++---------- resources/i18n/pt_BR/fdmextruder.def.json.po | 6 +-- resources/i18n/pt_BR/fdmprinter.def.json.po | 24 ++++----- 3 files changed, 41 insertions(+), 41 deletions(-) diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 8aad16ed27..671cf9d76b 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-10-29 15:01+0100\n" -"PO-Revision-Date: 2018-10-01 03:20-0300\n" +"PO-Revision-Date: 2018-11-06 02:20-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio \n" "Language: pt_BR\n" @@ -48,7 +48,7 @@ msgstr "O GCodeWriter não suporta modo binário." #: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 msgctxt "@warning:status" msgid "Please prepare G-code before exporting." -msgstr "" +msgstr "Por favor prepare o G-Code antes de exportar." #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" @@ -77,7 +77,7 @@ msgstr "Exibir registro de alterações" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 msgctxt "@action" msgid "Update Firmware" -msgstr "" +msgstr "Atualizar Firmware" #: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" @@ -821,7 +821,7 @@ msgstr "Arquivo pré-fatiado {0}" #: /home/ruben/Projects/Cura/cura/API/Account.py:71 msgctxt "@info:title" msgid "Login failed" -msgstr "" +msgstr "Login falhou" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 @@ -895,32 +895,32 @@ msgstr "Falha ao importa perfil de {0}: {1}!" msgid "No custom profile to import in file {0}" -msgstr "" +msgstr "Não há perfil personalizado a importar no arquivo {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "Failed to import profile from {0}:" -msgstr "" +msgstr "Erro ao importar perfil de {0}:" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:218 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." -msgstr "" +msgstr "Este perfil {0} contém dados incorretos, não foi possível importá-lo." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "" +msgstr "A máquina definida no perfil {0} ({1}) não equivale à sua máquina atual ({2}), não foi possível importá-lo." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:312 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}:" -msgstr "" +msgstr "Erro ao importar perfil de {0}:" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format @@ -1407,7 +1407,7 @@ msgstr "Deslocamento Y do Bico" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 msgctxt "@label" msgid "Cooling Fan Number" -msgstr "" +msgstr "Número da Ventoinha de Resfriamento" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" @@ -1511,7 +1511,7 @@ msgstr "Voltar" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 msgctxt "@title:window" msgid "Confirm uninstall" -msgstr "" +msgstr "Confirme a desinstalação" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 msgctxt "@text:window" @@ -1654,7 +1654,7 @@ msgstr "Fechar" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 msgctxt "@title" msgid "Update Firmware" -msgstr "" +msgstr "Atualizar Firmware" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 msgctxt "@label" @@ -1679,12 +1679,12 @@ msgstr "Carregar Firmware personalizado" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:83 msgctxt "@label" msgid "Firmware can not be updated because there is no connection with the printer." -msgstr "" +msgstr "O firmware não pode ser atualizado porque não há conexão com a impressora." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:91 msgctxt "@label" msgid "Firmware can not be updated because the connection with the printer does not support upgrading firmware." -msgstr "" +msgstr "O firmware não pode ser atualizado porque a conexão com a impressora não suporta atualização de firmware." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 msgctxt "@title:window" @@ -1919,62 +1919,62 @@ msgstr "Aguardando por: " #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" msgid "Configuration change" -msgstr "" +msgstr "Alteração de configuração" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change(s):" -msgstr "" +msgstr "A impressora atribuída, %1, requer as seguintes alterações de configuração:" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:367 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." -msgstr "" +msgstr "A impressora %1 está atribuída, mas o trabalho contém configuração de material desconhecida." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 msgctxt "@label" msgid "Change material %1 from %2 to %3." -msgstr "" +msgstr "Alterar material %1 de %2 para %3." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:378 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." -msgstr "" +msgstr "Carregar %3 como material %1 (isto não pode ser sobreposto)." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 msgctxt "@label" msgid "Change print core %1 from %2 to %3." -msgstr "" +msgstr "Alterar núcleo de impressão %1 de %2 para %3." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:384 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." -msgstr "" +msgstr "Alterar mesa de impressão para %1 (Isto não pode ser sobreposto)." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 msgctxt "@label" msgid "Override" -msgstr "" +msgstr "Sobrepôr" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:432 msgctxt "@label" msgid "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?" -msgstr "" +msgstr "Iniciar um trabalho de impressão com configuração incompatível pode danificar sua impressora 3D. Voce tem certeza que quer sobrepôr a configuração e imprimir %1?" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 msgctxt "@window:title" msgid "Override configuration configuration and start print" -msgstr "" +msgstr "Sobrepôr configuração e iniciar impressão" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 msgctxt "@label" msgid "Glass" -msgstr "" +msgstr "Vidro" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 msgctxt "@label" msgid "Aluminum" -msgstr "" +msgstr "Alumínio" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 msgctxt "@label link to connect manager" diff --git a/resources/i18n/pt_BR/fdmextruder.def.json.po b/resources/i18n/pt_BR/fdmextruder.def.json.po index b8ea7ec1e4..10db723a69 100644 --- a/resources/i18n/pt_BR/fdmextruder.def.json.po +++ b/resources/i18n/pt_BR/fdmextruder.def.json.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-10-29 15:01+0000\n" -"PO-Revision-Date: 2018-10-02 05:00-0300\n" +"PO-Revision-Date: 2018-11-06 04:00-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio \n" "Language: pt_BR\n" @@ -170,12 +170,12 @@ msgstr "A coordenada Z da posição onde o bico faz a purga no início da impres #: fdmextruder.def.json msgctxt "machine_extruder_cooling_fan_number label" msgid "Extruder Print Cooling Fan" -msgstr "" +msgstr "Ventoinha de Refrigeração da Impressão" #: fdmextruder.def.json msgctxt "machine_extruder_cooling_fan_number description" msgid "The number of the print cooling fan associated with this extruder. Only change this from the default value of 0 when you have a different print cooling fan for each extruder." -msgstr "" +msgstr "O número da ventoinha de refrigeração da impressão associada a este extrusor. Somente altere o valor default de 0 quando você tiver uma ventoinha diferente para cada extrusor." #: fdmextruder.def.json msgctxt "platform_adhesion label" diff --git a/resources/i18n/pt_BR/fdmprinter.def.json.po b/resources/i18n/pt_BR/fdmprinter.def.json.po index 1b746e8b0b..728c2eb3e9 100644 --- a/resources/i18n/pt_BR/fdmprinter.def.json.po +++ b/resources/i18n/pt_BR/fdmprinter.def.json.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-10-29 15:01+0000\n" -"PO-Revision-Date: 2018-10-02 06:30-0300\n" +"PO-Revision-Date: 2018-10-06 04:30-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio \n" "Language: pt_BR\n" @@ -1078,7 +1078,7 @@ msgstr "Conectar Polígonos do Topo e Base" #: fdmprinter.def.json msgctxt "connect_skin_polygons description" msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happen midway over infill this feature can reduce the top surface quality." -msgstr "" +msgstr "Conectar caminhos de contorno da base e topo quando estiverem próximos entre si. Para o padrão concêntrico, habilitar este ajuste reduzirá bastante o tempo de percurso, mas por as conexões poderem acontecer no meio do preenchimento, este recurso pode reduzir a qualidade da superfície superior." #: fdmprinter.def.json msgctxt "skin_angles label" @@ -1498,7 +1498,7 @@ msgstr "Padrão de Preenchimento" #: fdmprinter.def.json msgctxt "infill_pattern description" msgid "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, tri-hexagon, cubic, octet, quarter cubic, cross and concentric patterns are fully printed every layer. Gyroid, cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "" +msgstr "O padrão do material de preenchimento da impressão. Os preenchimentos de linha e ziguezague mudam de direção em camadas alternadas, reduzindo o custo do material. Os padrões de grade, triângulo, tri-hexágono, cúbico, octeto, quarto cúbico, cruzado e concêntrico são impressos em totalidade a cada camada. Os padrões giróide, cúbico, quarto cúbico e octeto mudam a cada camada para prover uma distribuição mais igualitária de força em cada direção." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1563,7 +1563,7 @@ msgstr "Cruzado 3D" #: fdmprinter.def.json msgctxt "infill_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Giróide" #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" @@ -3272,32 +3272,32 @@ msgstr "Orientação do padrão de preenchimento para suportes. O padrão de pre #: fdmprinter.def.json msgctxt "support_brim_enable label" msgid "Enable Support Brim" -msgstr "" +msgstr "Habilitar Brim de Suporte" #: fdmprinter.def.json msgctxt "support_brim_enable description" msgid "Generate a brim within the support infill regions of the first layer. This brim is printed underneath the support, not around it. Enabling this setting increases the adhesion of support to the build plate." -msgstr "" +msgstr "Gera o brim dentro das regiões de preenchimento de suporte da primeira camada. Este brim é impresso sob o suporte, não em volta dele. Habilitar este ajuste aumenta a aderência de suporte à mesa de impressão." #: fdmprinter.def.json msgctxt "support_brim_width label" msgid "Support Brim Width" -msgstr "" +msgstr "Largura do Brim de Suporte" #: fdmprinter.def.json msgctxt "support_brim_width description" msgid "The width of the brim to print underneath the support. A larger brim enhances adhesion to the build plate, at the cost of some extra material." -msgstr "" +msgstr "A largura do brim a ser impresso sob o suporte. Um brim mais largo melhora a aderência à mesa de impressão, ao custo de material extra." #: fdmprinter.def.json msgctxt "support_brim_line_count label" msgid "Support Brim Line Count" -msgstr "" +msgstr "Número de Filetes do Brim de Suporte" #: fdmprinter.def.json msgctxt "support_brim_line_count description" msgid "The number of lines used for the support brim. More brim lines enhance adhesion to the build plate, at the cost of some extra material." -msgstr "" +msgstr "O número de filetes usado para o brim de suporte. Mais filetes melhoram a aderência na mesa de impressão, ao custo de material extra." #: fdmprinter.def.json msgctxt "support_z_distance label" @@ -3871,12 +3871,12 @@ msgstr "O número de linhas usada para o brim. Mais linhas de brim melhoram a ad #: fdmprinter.def.json msgctxt "brim_replaces_support label" msgid "Brim Replaces Support" -msgstr "" +msgstr "Brim Substitui Suporte" #: fdmprinter.def.json msgctxt "brim_replaces_support description" msgid "Enforce brim to be printed around the model even if that space would otherwise be occupied by support. This replaces some regions of the first layer of support by brim regions." -msgstr "" +msgstr "Força que o brim seja impresso em volta do modelo mesmo se este espaço fosse ser ocupado por suporte. Isto substitui algumas regiões da primeira camada de suporte por regiões de brim." #: fdmprinter.def.json msgctxt "brim_outside_only label" From 9f246910bc0e7334553490e8bacf0a7415cd487d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 6 Nov 2018 09:18:20 +0100 Subject: [PATCH 21/28] Make avatar image border a bit wider This prevents a white edge from showing CURA-5772 --- resources/qml/Account/AvatarImage.qml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/qml/Account/AvatarImage.qml b/resources/qml/Account/AvatarImage.qml index c730ef428f..436babe5a3 100644 --- a/resources/qml/Account/AvatarImage.qml +++ b/resources/qml/Account/AvatarImage.qml @@ -44,7 +44,10 @@ Item UM.RecolorImage { id: profileImageOutline - anchors.fill: parent + anchors.centerIn: parent + // Make it a bit bigger than it has to, otherwise it sometimes shows a white border. + width: parent.width + 2 + height: parent.height + 2 source: UM.Theme.getIcon("circle_outline") sourceSize: Qt.size(parent.width, parent.height) color: UM.Theme.getColor("account_widget_ouline_active") From 08917c37a11c8b089948c8eeffaaa2a4c780549b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 6 Nov 2018 09:20:36 +0100 Subject: [PATCH 22/28] Improve rendering of scaled avatar image CURA-5772 --- resources/qml/Account/AvatarImage.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/Account/AvatarImage.qml b/resources/qml/Account/AvatarImage.qml index 436babe5a3..3be81aa155 100644 --- a/resources/qml/Account/AvatarImage.qml +++ b/resources/qml/Account/AvatarImage.qml @@ -24,6 +24,7 @@ Item source: UM.Theme.getImage("avatar_default") fillMode: Image.PreserveAspectCrop visible: false + mipmap: true } Rectangle From 317447aa5451ac0d4220dead40bba89b61587bbf Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 6 Nov 2018 09:52:01 +0100 Subject: [PATCH 23/28] Fix multi-buildplate panel location CURA-5772 --- resources/qml/Account/AvatarImage.qml | 2 +- resources/qml/Cura.qml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/resources/qml/Account/AvatarImage.qml b/resources/qml/Account/AvatarImage.qml index 3be81aa155..b76aff6990 100644 --- a/resources/qml/Account/AvatarImage.qml +++ b/resources/qml/Account/AvatarImage.qml @@ -24,7 +24,7 @@ Item source: UM.Theme.getImage("avatar_default") fillMode: Image.PreserveAspectCrop visible: false - mipmap: true + mipmap: true } Rectangle diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 3e2515cb3e..534fffb418 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -212,8 +212,9 @@ UM.MainWindow visible: UM.Preferences.getValue("cura/use_multi_build_plate") anchors { - bottom: parent.bottom - left: parent.left + bottom: viewOrientationControls.top + left: toolbar.right + margins: UM.Theme.getSize("default_margin").width } } From 9c9e81b30c5b17f2e8e948aecbf8af1e0a31a701 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 6 Nov 2018 11:04:16 +0100 Subject: [PATCH 24/28] Move InstanceContainer import into type checking closure CURA-5898 --- cura/Machines/MaterialManager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 4f7646b341..2b41718975 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -12,7 +12,6 @@ from UM.Application import Application from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Logger import Logger from UM.Settings.ContainerRegistry import ContainerRegistry -from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.SettingFunction import SettingFunction from UM.Util import parseBool @@ -22,6 +21,7 @@ from .VariantType import VariantType if TYPE_CHECKING: from UM.Settings.DefinitionContainer import DefinitionContainer + from UM.Settings.InstanceContainer import InstanceContainer from cura.Settings.GlobalStack import GlobalStack from cura.Settings.ExtruderStack import ExtruderStack @@ -451,7 +451,7 @@ class MaterialManager(QObject): # - A fallback by type (@sa getFallbackMaterialIdByMaterialType), which adds the generic version of this material # - A fallback by GUID; If a material has been duplicated, it should also check if the original materials do have # a GUID. This should only be done if the material itself does not have a quality just yet. - def getFallBackMaterialIdsByMaterial(self, material: InstanceContainer) -> List[str]: + def getFallBackMaterialIdsByMaterial(self, material: "InstanceContainer") -> List[str]: results = [] # type: List[str] material_groups = self.getMaterialGroupListByGUID(material.getMetaDataEntry("GUID")) From 11a3da3068bf71ac3d514af893db4b4870c8b3f8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 6 Nov 2018 11:06:20 +0100 Subject: [PATCH 25/28] Removed color animation from stage buttons This caused laggy updates and it didn't add that much anyway CURA-5772 --- resources/qml/ActionButton.qml | 2 -- resources/themes/cura-light/styles.qml | 2 -- 2 files changed, 4 deletions(-) diff --git a/resources/qml/ActionButton.qml b/resources/qml/ActionButton.qml index a1c03af143..621318c4bb 100644 --- a/resources/qml/ActionButton.qml +++ b/resources/qml/ActionButton.qml @@ -37,7 +37,6 @@ Button color: button.hovered ? button.textHoverColor : button.textColor visible: source != "" anchors.verticalCenter: parent.verticalCenter - Behavior on color { ColorAnimation { duration: 50 } } } Label @@ -59,7 +58,6 @@ Button radius: UM.Theme.getSize("action_button_radius").width border.width: UM.Theme.getSize("default_lining").width border.color: button.enabled ? (button.hovered ? button.outlineHoverColor : button.outlineColor) : button.outlineDisabledColor - Behavior on color { ColorAnimation { duration: 50 } } } MouseArea diff --git a/resources/themes/cura-light/styles.qml b/resources/themes/cura-light/styles.qml index 43e8d29b57..dacff1b42b 100755 --- a/resources/themes/cura-light/styles.qml +++ b/resources/themes/cura-light/styles.qml @@ -129,8 +129,6 @@ QtObject return UM.Theme.getColor("main_window_header_button_background_inactive") } } - - Behavior on color { ColorAnimation { duration: 50 } } } } From 0af9216c75edfb155b573d250e5159ca9debb1f6 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 6 Nov 2018 12:29:25 +0100 Subject: [PATCH 26/28] Remove deprecated setup.py --- setup.py | 76 -------------------------------------------------------- 1 file changed, 76 deletions(-) delete mode 100644 setup.py diff --git a/setup.py b/setup.py deleted file mode 100644 index 0d78f44ddc..0000000000 --- a/setup.py +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright (c) 2015 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -from distutils.core import setup -import py2exe -import UM -import UM.Qt #@UnusedImport -import cura #@UnusedImport -import os -import shutil -import site - -# work around the limitation that shutil.copytree does not allow the target directory to exist -def copytree(src, dst, symlinks=False, ignore=None): - if not os.path.exists(dst): - os.makedirs(dst) - for item in os.listdir(src): - s = os.path.join(src, item) - d = os.path.join(dst, item) - if os.path.isdir(s): - copytree(s, d, symlinks, ignore) - else: - shutil.copy2(s, d) - -includes = ["sip", "ctypes", "UM", "PyQt5.QtNetwork", "PyQt5._QOpenGLFunctions_2_0", "serial", "Arcus", "google", "google.protobuf", "google.protobuf.descriptor", "xml.etree", "xml.etree.ElementTree", "cura", "cura.OneAtATimeIterator"] -# Include all the UM modules in the includes. As py2exe fails to properly find all the dependencies due to the plugin architecture. -for dirpath, dirnames, filenames in os.walk(os.path.dirname(UM.__file__)): - if "__" in dirpath: - continue - module_path = dirpath.replace(os.path.dirname(UM.__file__), "UM") - module_path = module_path.split(os.path.sep) - module_name = ".".join(module_path) - if os.path.isfile(dirpath + "/__init__.py"): - includes += [module_name] - for filename in filenames: - if "__" in filename or not filename.endswith(".py"): - continue - includes += [module_name + "." + os.path.splitext(filename)[0]] - -print("Removing previous distribution package") -shutil.rmtree("dist", True) - -setup(name="Cura", - version="15.09.80", - author="Ultimaker", - author_email="a.hiemstra@ultimaker.com", - url="http://software.ultimaker.com/", - license="GNU LESSER GENERAL PUBLIC LICENSE (LGPL)", - scripts=["cura_app.py"], - windows=[{"script": "cura_app.py", "dest_name": "Cura", "icon_resources": [(1, "icons/cura.ico")]}], - #console=[{"script": "cura_app.py"}], - options={"py2exe": {"skip_archive": False, "includes": includes}}) - -print("Copying Cura plugins.") -shutil.copytree(os.path.dirname(UM.__file__) + "/../plugins", "dist/plugins", ignore = shutil.ignore_patterns("ConsoleLogger", "OBJWriter", "MLPWriter", "MLPReader")) -for path in os.listdir("plugins"): - copytree("plugins/" + path, "dist/plugins/" + path) -print("Copying resources.") -copytree(os.path.dirname(UM.__file__) + "/../resources", "dist/resources") -copytree("resources", "dist/resources") -print("Copying Uranium QML.") -shutil.copytree(os.path.dirname(UM.__file__) + "/Qt/qml/UM", "dist/qml/UM") -for site_package in site.getsitepackages(): - qt_origin_path = os.path.join(site_package, "PyQt5") - if os.path.isdir(qt_origin_path): - print("Copying PyQt5 plugins from: %s" % qt_origin_path) - shutil.copytree(os.path.join(qt_origin_path, "plugins"), "dist/PyQt5/plugins") - print("Copying PyQt5 QtQuick from: %s" % qt_origin_path) - shutil.copytree(os.path.join(qt_origin_path, "qml/QtQuick"), "dist/qml/QtQuick") - shutil.copytree(os.path.join(qt_origin_path, "qml/QtQuick.2"), "dist/qml/QtQuick.2") - print("Copying PyQt5 svg library from: %s" % qt_origin_path) - shutil.copy(os.path.join(qt_origin_path, "Qt5Svg.dll"), "dist/Qt5Svg.dll") - print("Copying Angle libraries from %s" % qt_origin_path) - shutil.copy(os.path.join(qt_origin_path, "libEGL.dll"), "dist/libEGL.dll") - shutil.copy(os.path.join(qt_origin_path, "libGLESv2.dll"), "dist/libGLESv2.dll") -os.rename("dist/cura_app.exe", "dist/Cura.exe") From 8e33a19ca7ce138f8789e0c854a066f763904c10 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 6 Nov 2018 13:31:02 +0100 Subject: [PATCH 27/28] Fix quality changes lookup in project loading CURA-5899 Should always use custom quality profile names to look up. --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index e994e1a817..9ee2ef0dd4 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -298,7 +298,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): values = parser["values"] if parser.has_section("values") else dict() num_settings_overriden_by_quality_changes += len(values) # Check if quality changes already exists. - quality_changes = self._container_registry.findInstanceContainers(id = container_id) + quality_changes = self._container_registry.findInstanceContainers(name = custom_quality_name, + type = "quality_changes") if quality_changes: containers_found_dict["quality_changes"] = True # Check if there really is a conflict by comparing the values From 9fa9c04517ff9a53b318ccece22bf22788275f22 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 6 Nov 2018 16:07:41 +0100 Subject: [PATCH 28/28] Fix translation mistakes found in Cura 3.6 These mistakes were found in the translations. In many cases it makes the text closer to the original rather than more consistent with the environment. If the environment is inconsistent then we should fix the original string in our source code rather than in the translations. Contributes to issue CURA-5870. --- resources/i18n/pt_BR/cura.po | 27 +++++++++++---------- resources/i18n/pt_BR/fdmprinter.def.json.po | 21 ++++++++-------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 671cf9d76b..73b8d759ce 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -16,6 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 2.0.6\n" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:22 msgctxt "@action" @@ -414,7 +415,7 @@ msgstr "Nenhum material carregado no slot {slot_number}" #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "PrintCore Diferente (Cura: {cure_printcore_name}, Impressora: {remote_printcore_name}) selecionado para o extrusor {extruder_id}" +msgstr "PrintCore Diferente (Cura: {cura_printcore_name}, Impressora: {remote_printcore_name}) selecionado para o extrusor {extruder_id}" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format @@ -2058,7 +2059,7 @@ msgstr "Abortar impressão" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" -msgstr "Conecta a uma impressora." +msgstr "Conecta a uma impressora" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" @@ -2602,7 +2603,7 @@ msgstr "Tudo está em ordem! A verificação terminou." #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:119 msgctxt "@label:MonitorStatus" msgid "Not connected to a printer" -msgstr "Não conectado a nenhuma impressora." +msgstr "Não conectado a nenhuma impressora" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:123 msgctxt "@label:MonitorStatus" @@ -2980,7 +2981,7 @@ msgstr "Exibir seções pendentes" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 msgctxt "@info:tooltip" msgid "Moves the camera so the model is in the center of the view when a model is selected" -msgstr "Move a câmera de modo que o modelo fique no centro da visão quando for selecionado." +msgstr "Move a câmera de modo que o modelo fique no centro da visão quando for selecionado" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" @@ -3025,7 +3026,7 @@ msgstr "Os modelos devem ser movidos pra baixo pra se assentar na plataforma de #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" -msgstr "Automaticamente fazer os modelos caírem na mesa de impressão." +msgstr "Automaticamente fazer os modelos caírem na mesa de impressão" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" @@ -3110,7 +3111,7 @@ msgstr "Comportamento default ao abrir um arquivo de projeto" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " -msgstr "Comportamento default ao abrir um arquivo de projeto" +msgstr "Comportamento default ao abrir um arquivo de projeto: " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" @@ -3175,7 +3176,7 @@ msgstr "Dados anônimos sobre sua impressão podem ser enviados para a Ultimaker #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" -msgstr "Enviar informação (anônima) de impressão." +msgstr "Enviar informação (anônima) de impressão" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" @@ -3562,7 +3563,7 @@ msgid "" msgstr "" "Alguns ajustes ocultados usam valores diferentes de seu valor calculado normal.\n" "\n" -"Clique para tornar estes ajustes visíveis. " +"Clique para tornar estes ajustes visíveis." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3582,7 +3583,7 @@ msgstr "Este ajuste é sempre compartilhado entre todos os extrusores. Modificá #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " -msgstr "O valor é resolvido de valores específicos de cada extrusor" +msgstr "O valor é resolvido de valores específicos de cada extrusor " #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" @@ -3655,7 +3656,7 @@ msgstr "A temperatura-alvo do hotend. O hotend vai aquecer ou esfriar na direç #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:98 msgctxt "@tooltip" msgid "The current temperature of this hotend." -msgstr "A temperatura atual deste hotend" +msgstr "A temperatura atual deste hotend." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:172 msgctxt "@tooltip of temperature input" @@ -4403,7 +4404,7 @@ msgstr "Você modificou alguns ajustes de perfil. Se você quiser alterá-los, u #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" -msgstr "Preenchimento:" +msgstr "Preenchimento" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" @@ -4495,7 +4496,7 @@ msgstr "Material" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" msgid "Use glue with this material combination" -msgstr "Use cola com esta combinação de materiais." +msgstr "Use cola com esta combinação de materiais" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" @@ -4845,7 +4846,7 @@ msgstr "Atualização de Versão de 2.7 para 3.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." -msgstr "Atualiza configurações do Cura 3.4 para o Cura 3.5" +msgstr "Atualiza configurações do Cura 3.4 para o Cura 3.5." #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "name" diff --git a/resources/i18n/pt_BR/fdmprinter.def.json.po b/resources/i18n/pt_BR/fdmprinter.def.json.po index 728c2eb3e9..bd55d331ae 100644 --- a/resources/i18n/pt_BR/fdmprinter.def.json.po +++ b/resources/i18n/pt_BR/fdmprinter.def.json.po @@ -16,6 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 2.0.6\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -458,7 +459,7 @@ msgstr "ID do Bico" #: fdmprinter.def.json msgctxt "machine_nozzle_id description" msgid "The nozzle ID for an extruder train, such as \"AA 0.4\" and \"BB 0.8\"." -msgstr "O identificador do bico para o carro extrusor, tais como \"AA 0.4\" ou \"BB 0.8\"" +msgstr "O identificador do bico para o carro extrusor, tais como \"AA 0.4\" ou \"BB 0.8.\"" #: fdmprinter.def.json msgctxt "machine_nozzle_size label" @@ -548,7 +549,7 @@ msgstr "Aceleração Máxima em X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_x description" msgid "Maximum acceleration for the motor of the X-direction" -msgstr "A aceleração máxima para o motor da impressora na direção X." +msgstr "A aceleração máxima para o motor da impressora na direção X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y label" @@ -598,7 +599,7 @@ msgstr "Jerk Default nos eixos X-Y" #: fdmprinter.def.json msgctxt "machine_max_jerk_xy description" msgid "Default jerk for movement in the horizontal plane." -msgstr "O valor default de jerk para movimentos no plano horizontal" +msgstr "O valor default de jerk para movimentos no plano horizontal." #: fdmprinter.def.json msgctxt "machine_max_jerk_z label" @@ -1867,7 +1868,7 @@ msgstr "Temperatura Default de Impressão" #: fdmprinter.def.json msgctxt "default_material_print_temperature description" msgid "The default temperature used for printing. This should be the \"base\" temperature of a material. All other print temperatures should use offsets based on this value" -msgstr "A temperatura default usada para a impressão. Esta deve ser a temperatura \"base\" de um material. Todas as outras temperaturas de impressão devem usar diferenças baseadas neste valor." +msgstr "A temperatura default usada para a impressão. Esta deve ser a temperatura \"base\" de um material. Todas as outras temperaturas de impressão devem usar diferenças baseadas neste valor" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1957,7 +1958,7 @@ msgstr "Tendência à Aderência" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "Tendência de aderência da superfície" +msgstr "Tendência de aderência da superfície." #: fdmprinter.def.json msgctxt "material_surface_energy label" @@ -2007,7 +2008,7 @@ msgstr "Habilitar Retração" #: fdmprinter.def.json msgctxt "retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area. " -msgstr "Retrai o filamento quando o bico está se movendo sobre uma área não impressa." +msgstr "Retrai o filamento quando o bico está se movendo sobre uma área não impressa. " #: fdmprinter.def.json msgctxt "retract_at_layer_change label" @@ -3547,7 +3548,7 @@ msgstr "Densidade da Base do Suporte" #: fdmprinter.def.json msgctxt "support_bottom_density description" msgid "The density of the floors of the support structure. A higher value results in better adhesion of the support on top of the model." -msgstr "A densidade das bases da estrutura de suporte. Um valor maior resulta em melhor aderência do suporte no topo da superfície" +msgstr "A densidade das bases da estrutura de suporte. Um valor maior resulta em melhor aderência do suporte no topo da superfície." #: fdmprinter.def.json msgctxt "support_bottom_line_distance label" @@ -3672,7 +3673,7 @@ msgstr "Sobrepor Velocidade de Ventoinha" #: fdmprinter.def.json msgctxt "support_fan_enable description" msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." -msgstr "Quando habilitado, a velocidade da ventoinha de resfriamento é alterada para as regiões de contorno imediatamente acima do suporte" +msgstr "Quando habilitado, a velocidade da ventoinha de resfriamento é alterada para as regiões de contorno imediatamente acima do suporte." #: fdmprinter.def.json msgctxt "support_supported_skin_fan_speed label" @@ -3946,7 +3947,7 @@ msgstr "Espessura da Camada Superior do Raft" #: fdmprinter.def.json msgctxt "raft_surface_thickness description" msgid "Layer thickness of the top raft layers." -msgstr "Espessura de camada das camadas superiores do raft" +msgstr "Espessura de camada das camadas superiores do raft." #: fdmprinter.def.json msgctxt "raft_surface_line_width label" @@ -5116,7 +5117,7 @@ msgstr "A distância média entre os pontos aleatórios introduzidos em cada seg #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "Deslocamento de extrusão máxima da compensação de taxa de fluxo." +msgstr "Deslocamento de extrusão máxima da compensação de taxa de fluxo" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description"