diff --git a/.gitignore b/.gitignore index 7fed42af69..51b98e330e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,8 @@ resources/i18n/en_7S resources/i18n/x-test resources/firmware resources/materials +resources/images/whats_new +resources/texts/whats_new CuraEngine.exe LC_MESSAGES .cache @@ -37,6 +39,7 @@ cura.desktop #Externally located plug-ins commonly installed by our devs. plugins/cura-big-flame-graph +plugins/cura-camera-position plugins/cura-god-mode-plugin plugins/cura-siemensnx-plugin plugins/CuraBlenderPlugin diff --git a/cura/Arranging/Nest2DArrange.py b/cura/Arranging/Nest2DArrange.py index dad67ba161..43d4d7f8a8 100644 --- a/cura/Arranging/Nest2DArrange.py +++ b/cura/Arranging/Nest2DArrange.py @@ -40,7 +40,7 @@ def findNodePlacement(nodes_to_arrange: List["SceneNode"], build_volume: "BuildV machine_width = build_volume.getWidth() machine_depth = build_volume.getDepth() - build_plate_bounding_box = Box(machine_width * factor, machine_depth * factor) + build_plate_bounding_box = Box(int(machine_width * factor), int(machine_depth * factor)) if fixed_nodes is None: fixed_nodes = [] diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py index 5fd2e70a1c..a2b8a87577 100755 --- a/cura/PlatformPhysics.py +++ b/cura/PlatformPhysics.py @@ -1,8 +1,7 @@ -# Copyright (c) 2020 Ultimaker B.V. +# Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import QTimer -from shapely.errors import TopologicalError # To capture errors if Shapely messes up. from UM.Application import Application from UM.Logger import Logger @@ -138,11 +137,7 @@ class PlatformPhysics: own_convex_hull = node.callDecoration("getConvexHull") other_convex_hull = other_node.callDecoration("getConvexHull") if own_convex_hull and other_convex_hull: - try: - overlap = own_convex_hull.translate(move_vector.x, move_vector.z).intersectsPolygon(other_convex_hull) - except TopologicalError as e: # Can happen if the convex hull is degenerate? - Logger.warning("Got a topological error when calculating convex hull intersection: {err}".format(err = str(e))) - overlap = False + overlap = own_convex_hull.translate(move_vector.x, move_vector.z).intersectsPolygon(other_convex_hull) if overlap: # Moving ensured that overlap was still there. Try anew! temp_move_vector = move_vector.set(x = move_vector.x + overlap[0] * self._move_factor, z = move_vector.z + overlap[1] * self._move_factor) diff --git a/docker/build.sh b/docker/build.sh index 9fec21ac50..1092ba4852 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -7,9 +7,9 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" PROJECT_DIR="$( cd "${SCRIPT_DIR}/.." && pwd )" # Make sure that environment variables are set properly -source /opt/rh/devtoolset-8/enable export PATH="${CURA_BUILD_ENV_PATH}/bin:${PATH}" export PKG_CONFIG_PATH="${CURA_BUILD_ENV_PATH}/lib/pkgconfig:${PKG_CONFIG_PATH}" +export LD_LIBRARY_PATH="${CURA_BUILD_ENV_PATH}/lib:${LD_LIBRARY_PATH}" cd "${PROJECT_DIR}" @@ -60,7 +60,7 @@ export PYTHONPATH="${PROJECT_DIR}/Uranium:.:${PYTHONPATH}" mkdir build cd build -cmake3 \ +cmake \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_PREFIX_PATH="${CURA_BUILD_ENV_PATH}" \ -DURANIUM_DIR="${PROJECT_DIR}/Uranium" \ diff --git a/docker/test.sh b/docker/test.sh index 9284fede20..bae2bf785e 100755 --- a/docker/test.sh +++ b/docker/test.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash cd build -ctest3 -j4 --output-on-failure -T Test +ctest -j4 --output-on-failure -T Test diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index ce0bb06d8d..1b88272d49 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -650,7 +650,6 @@ class XmlMaterialProfile(InstanceContainer): machine_id_list = product_id_map.get(identifier.get("product"), []) if not machine_id_list: machine_id_list = self.getPossibleDefinitionIDsFromName(identifier.get("product")) - for machine_id in machine_id_list: definitions = ContainerRegistry.getInstance().findDefinitionContainersMetadata(id = machine_id) if not definitions: @@ -1068,6 +1067,8 @@ class XmlMaterialProfile(InstanceContainer): id_list = {name.lower().replace(" ", ""), # simply removing all spaces name.lower().replace(" ", "_"), # simply replacing all spaces with underscores "_".join(merged_name_parts), + name.replace(" ", ""), + name.replace(" ", "_") } id_list = list(id_list) return id_list diff --git a/requirements.txt b/requirements.txt index 860c8dbc8a..dc14e2e041 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,35 +3,33 @@ certifi==2019.11.28 cffi==1.14.1 chardet==3.0.4 colorlog -comtypes==1.1.7 cryptography==3.4.8 decorator==4.4.0 idna==2.8 -importlib-metadata==3.7.2 +importlib-metadata==4.10.0 keyring==23.0.1 -lxml==4.6.3 +lxml==4.7.1 mypy==0.740 netifaces==0.10.9 networkx==2.6.2 -numpy==1.20.2 +numpy==1.21.5 numpy-stl==2.10.1 packaging==18.0 +pyclipper==1.3.0.post2 pycollada==0.6 pycparser==2.20 pyparsing==2.4.2 -PyQt5==5.15.2 -PyQt5-sip==12.8.1 +PyQt5==5.15.6 +PyQt5-sip==12.9.0 pyserial==3.4 pytest python-dateutil==2.8.0 python-utils==2.3.0 -pywin32==301 -requests==2.22.0 -scipy==1.6.2 +pywin32==303 +scipy==1.8.0rc2 sentry-sdk==0.13.5 -shapely[vectorized]==1.8.0 six==1.12.0 -trimesh==3.2.33 +trimesh==3.9.36 twisted==21.2.0 typing urllib3==1.25.9 diff --git a/resources/images/whats_new/1.png b/resources/images/whats_new/1.png deleted file mode 100644 index f1213a6b5a..0000000000 Binary files a/resources/images/whats_new/1.png and /dev/null differ diff --git a/resources/qml/Dialogs/AboutDialog.qml b/resources/qml/Dialogs/AboutDialog.qml index 1ee0b31040..121f5d40b4 100644 --- a/resources/qml/Dialogs/AboutDialog.qml +++ b/resources/qml/Dialogs/AboutDialog.qml @@ -145,13 +145,13 @@ UM.Dialog projectsModel.append({ name: "SciPy", description: catalog.i18nc("@label", "Support library for scientific computing"), license: "BSD-new", url: "https://www.scipy.org/" }); projectsModel.append({ name: "NumPy", description: catalog.i18nc("@label", "Support library for faster math"), license: "BSD", url: "http://www.numpy.org/" }); projectsModel.append({ name: "NumPy-STL", description: catalog.i18nc("@label", "Support library for handling STL files"), license: "BSD", url: "https://github.com/WoLpH/numpy-stl" }); - projectsModel.append({ name: "Shapely", description: catalog.i18nc("@label", "Support library for handling planar objects"), license: "BSD", url: "https://github.com/Toblerity/Shapely" }); projectsModel.append({ name: "Trimesh", description: catalog.i18nc("@label", "Support library for handling triangular meshes"), license: "MIT", url: "https://trimsh.org" }); projectsModel.append({ name: "libSavitar", description: catalog.i18nc("@label", "Support library for handling 3MF files"), license: "LGPLv3", url: "https://github.com/ultimaker/libsavitar" }); projectsModel.append({ name: "libCharon", description: catalog.i18nc("@label", "Support library for file metadata and streaming"), license: "LGPLv3", url: "https://github.com/ultimaker/libcharon" }); projectsModel.append({ name: "PySerial", description: catalog.i18nc("@label", "Serial communication library"), license: "Python", url: "http://pyserial.sourceforge.net/" }); projectsModel.append({ name: "python-zeroconf", description: catalog.i18nc("@label", "ZeroConf discovery library"), license: "LGPL", url: "https://github.com/jstasiak/python-zeroconf" }); projectsModel.append({ name: "Clipper", description: catalog.i18nc("@label", "Polygon clipping library"), license: "Boost", url: "http://www.angusj.com/delphi/clipper.php" }); + projectsModel.append({ name: "Pyclipper", description: catalog.i18nc("@label", "Python bindings for Clipper"), license: "MIT", url: "https://github.com/fonttools/pyclipper" }); projectsModel.append({ name: "mypy", description: catalog.i18nc("@Label", "Static type checker for Python"), license: "MIT", url: "http://mypy-lang.org/" }); projectsModel.append({ name: "certifi", description: catalog.i18nc("@Label", "Root Certificates for validating SSL trustworthiness"), license: "MPL", url: "https://github.com/certifi/python-certifi" }); projectsModel.append({ name: "cryptography", description: catalog.i18nc("@Label", "Root Certificates for validating SSL trustworthiness"), license: "APACHE and BSD", url: "https://cryptography.io/" }); diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 7ea89e34ba..7d5aacd9f8 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -167,13 +167,11 @@ UM.PreferencesPage append({ text: "Čeština", code: "cs_CZ" }) append({ text: "Deutsch", code: "de_DE" }) append({ text: "Español", code: "es_ES" }) - //Finnish is disabled for being incomplete: append({ text: "Suomi", code: "fi_FI" }) append({ text: "Français", code: "fr_FR" }) append({ text: "Italiano", code: "it_IT" }) append({ text: "日本語", code: "ja_JP" }) append({ text: "한국어", code: "ko_KR" }) append({ text: "Nederlands", code: "nl_NL" }) - //Polish is disabled for being incomplete: append({ text: "Polski", code: "pl_PL" }) append({ text: "Português do Brasil", code: "pt_BR" }) append({ text: "Português", code: "pt_PT" }) append({ text: "Русский", code: "ru_RU" }) @@ -186,6 +184,12 @@ UM.PreferencesPage { append({ text: "Pirate", code: "en_7S" }) } + + // incomplete and/or abandoned + append({ text: catalog.i18nc("@heading", "-- incomplete --"), code: "" }) + append({ text: "Magyar", code: "hu_HU" }) + append({ text: "Suomi", code: "fi_FI" }) + append({ text: "Polski", code: "pl_PL" }) } } @@ -197,8 +201,7 @@ UM.PreferencesPage model: languageList Layout.fillWidth: true - currentIndex: - { + function setCurrentIndex() { var code = UM.Preferences.getValue("general/language"); for(var i = 0; i < languageList.count; ++i) { @@ -208,7 +211,17 @@ UM.PreferencesPage } } } - onActivated: UM.Preferences.setValue("general/language", model.get(index).code) + + currentIndex: setCurrentIndex() + + onActivated: if (model.get(index).code != "") + { + UM.Preferences.setValue("general/language", model.get(index).code); + } + else + { + currentIndex = setCurrentIndex(); + } } Label